Ну, вы можете иметь другие вещи в фактах, кроме атомов, например, вы можете иметь списки. После того, как вы сделали это, вы можете захотеть узнать о списке на один элемент, и вы можете иметь
oneelement([X]).
Кроме того, что вы хотите, чтобы сравнить то, что это последний элемент в списке
lastelement([X],X).
lastelement([_|Remainder],X) :- lastelement(Remainder,X).
очень полезно member
предиката определяются как
member([X|_],X).
member([_|Remainder],X) :- member(Remainder,X).
Каждые из них использует нешлифованный факт в качестве базового случая, путь сопоставления специальной формы, который более конкретно, чем просто lost(X)
Я просто хочу сделать замечание, что если вы будете использовать переменную в предложении только один раз (а не 2 или более использований), пролог (в частности, SWI) даст вам varning, например «Warning: /path/to/file.pro:123: Синглтонные переменные: [Var]» Вы должны использовать _ в таких местах. – Xonix
@Xonix: Или просто префикс существующего имени с подчеркиванием, подобным этому: '_Foobar'. Это позволяет избежать однотонального предупреждения, позволяя использовать объяснительное имя. – bcat
@Xonix: In (Sicstus) Prolog вы также должны убедиться, что следующая буква _ - это верхний регистр (например, имя переменной), чтобы избежать предупреждения. – Rune