Eh bien, vous pouvez avoir d'autres choses dans les faits en plus des atomes, par exemple, vous pouvez avoir des listes. Une fois que vous avez fait cela, vous voudrez peut-être savoir sur une liste d'un élément, et vous pouvez avoir
oneelement([X]).
De même, que vous voulez comparer ce qui est le dernier élément dans une liste
lastelement([X],X).
lastelement([_|Remainder],X) :- lastelement(Remainder,X).
Le
très utile member
prédicat est défini comme
member([X|_],X).
member([_|Remainder],X) :- member(Remainder,X).
Chacun de ces utilise un fait non au sol comme cas de base, en faisant correspondre une forme spéciale qui est plus spécifique que juste lost(X)
Je veux juste faire une remarque, que si vous utilisez une variable dans une clause seulement 1 fois (pas 2 ou plusieurs usages), Prolog (en particulier SWI) vous donnera varning, comme "Attention: /path/to/file.pro:123: Singleton variables: [Var]" Vous devriez utiliser _ dans de tels endroits. – Xonix
@Xonix: Ou simplement préfixer le nom existant avec un trait de soulignement comme ceci: '_Foobar'. Cela évite l'avertissement singleton tout en vous permettant d'utiliser un nom explicatif. – bcat
@Xonix: Dans (Sicstus) Prolog, vous devez également vous assurer que la lettre qui suit _ est en majuscule (comme un nom de variable) pour éviter l'avertissement. – Rune