Пролог Рекурсивные правила Неправильный результат - PullRequest
0 голосов
/ 19 июля 2010

Я определил рекурсивное правило, но результат кажется неверным.

customer(peter,bank(maybank),customertype(personal),
 citizen(malaysian),age(62),credit(50000),
 income(3000),property(car) ).

isseniorcitizen(X) :- customer(X, bank(_),customertype(_),
 citizen(malaysian),age(Age),credit(_),
 income(_),property(_)), 
 Age >= 60.

lowerinterest(Senior) :- isseniorcitizen(Senior).

isseniorcitizen(peter).

Но возвращение SWI-Пролога Х = Питер; Х = Питер.

Почему он возвращается два раза, а не один раз?

Пожалуйста, помогите.

Спасибо.

1 Ответ

2 голосов
/ 19 июля 2010

Простая проблема в том, что вы дважды заявили, что Питер - пожилой гражданин;сначала по порядку следуйте логике в вашей программе, добавив его в «базу данных» сверху, затем просто заявив, что он пожилой гражданин в нижней части вашей программы.Мой предыдущий ответ (добавить вырезку) также правильный, но пропускает проблему;он отменит поиск объединенной переменной X после того, как обнаружит, что peter является совпадающим атомом, и, следовательно, не перейдет к другим X-es, кроме peter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...