6 votes

Comment imprimer des nombres de 1 à 100 en Prolog ?

Le code suivant est un code Prolog qui donne tous les entiers supérieurs à 0. Chaque fois que je mets ; dans l'interprète, il donne le numéro suivant :

is_integer(0).
is_integer(X) :- is_integer(Y),X is Y+1.

Existe-t-il un moyen de n'afficher que les nombres compris entre 0 et 100 ? Lorsqu'il atteint 100, il doit s'arrêter.

5voto

false Points 10177

Il existe un prédicat intégré between/3 à cette fin dans B, Ciao, SICStus (bibliothèque), SWI, YAP, XSB (bibliothèque).

?- between(0,100,X).
   X = 0
;  X = 1
; ...
; X = 100.

Si vous commencez à apprendre Prolog, mieux vaut essayer d'utiliser s(X) qui sont beaucoup plus faciles à comprendre et à raisonner. Même exemple, mais seulement jusqu'à 3 :

?- nat_nat_sum(N,_,s(s(s(0)))).

avec la définition :

nat_nat_sum(0,I,I).
nat_nat_sum(s(I),J,s(K)) :-
   nat_nat_sum(I,J,K).

3voto

CapelliC Points 30055

Quel beau quiz ! Il illustre très bien la difficulté de contrôler la récursivité avec les outils minimaux définis par Prolog. Nous devons limiter nos solutions à des valeurs inférieures à la limite prédéfinie, ce qui restreint la recherche non liée :

is_integer(0).
is_integer(X) :-
    is_integer(Y),
    ( Y >= 100, ! ; X is Y + 1 ).

Voici la sortie de la trace en limitant la plage à 3 (c.-à-d. ... Y >= 3, ! ; ... )

?- is_integer(X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
true.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X