Мне было интересно, можно ли проверить, существует ли предикат (с той же информацией), чтобы пользователь не смог снова ввести ту же информацию.Пролог, избегающий повторяющихся предикатов
я уже успел сделать это за один предикат:
:- dynamic(test/2).
test(a,b).
top(X,Y) :-
(test(X,Y),
write('Yes'),!
;write('No'),!
).
Эта версия работает нормально, возвращая «Да», если информация уже существует и «Нет», если он не делает.
Мне было интересно, можно ли сделать это для нескольких prediactes, а не только для 'test/2'; Я попытался заменить предикат 'test' переменной Pred, но, к сожалению, я получаю синтаксическую ошибку, когда пытаюсь ее скомпилировать. Вот моя попытка:
main(Pred,X,Y) :-
(Pred(X,Y),
write('Yes'),!
;write('No'),!
).
Возможно ли это сделать что-то вроде этого, и если это то, как бы это было возможно?
Btw Я использую GNU Prolog, если это помогает.
Большое спасибо за помощь: D !!
это не должно быть '->' в если-то-то еще? –
Вы не проверяете наличие предиката. Вы проверяете, верны ли определенные запросы или факты, правильно?Одно дело проверить, существует ли вообще-то Pred' как предикат, а другой - определить, выполняется ли 'test (X, Y)' (или 'call (Pred, X, Y)') для определенного 'X' и/или 'Y'. – lurker