Представьте, что у меня есть следующая база знаний, которая дает каждому человеку его имя и возраст.
person(mary, 39).
person(john, 24).
person(sandy, 17).
Теперь я хочу получить всех лиц старше 20 лет. Кроме того, я просто хочу собрать их имена, а не их возраст. Здесь я хочу получить mary
и john
.
Как это сделать вообще на Прологе и конкретно на SWI-Prolog?
Если мы используем переменную, которая не является анонимной, например:
?- person(X, Y), Y > 20.
Пролог даст мне значения как для X
, так и для Y
, и я не хочу Y
.
Я не могу использовать анонимную переменную _
, потому что Пролог не может связать два ее экземпляра. Следующее дает ошибку:
?- person(X, _), _ > 20.
Итак, как это сделать?