Пролог существует функция - PullRequest
2 голосов
/ 16 марта 2012

Мне нужно написать в прологе эти заявления первого порядка. Как они должны быть написаны? красный (X) должен вернуть false, зеленый (X) должен вернуть false, а зеленый (X) или красный (X) должен вернуть true

enter image description here

У меня уже есть этот код:

% Assigning Facts

apple(a).
apple(b).
orange(c).
pear(d).
carrot(e).
onion(f).
pepper(g).
% Assigning Rules

red(X) :- apple(X).
green(X) :- apple(X).

fruit(X) :- apple(X).
fruit(X) :- orange(X).
fruit(X) :- pear(X).

vegetable(X) :- carrot(X).
vegetable(X) :- pepper(X).

tasty(X) :- fruit(X).
tasty(X) :- carrot(X).
tasty(X) :- not(onion(X)).

vegetable(X) :- not(tasty(X)).

1 Ответ

5 голосов
/ 16 марта 2012

Что такое метод «существует» в Прологе, о котором вы уже знаете?

Как насчет:

red(X).               % ∃x Red(x)
green(X).             % ∃x Green(x)
(red(X) ; green(X)).  % ∃x Red(x) v Green(x)

Пролог будет перечислять привязки X, которые удовлетворяют каждому вызову, или не удаётся попробовать .Если вы просто хотели проверить их существование и не собирать привязки, вы можете игнорировать переменную и вырезать после первой привязки, например, так:

red(_), !.

Вы также спросили, как проверить, является ли что-то исключительно краснымили зеленый, но не оба.Попробуйте это:

((\+ red(X), green(X)) ; (red(X), \+ green(X)).  % ∃x Red(x) ⊻ Green(x)

Где означает Эксклюзив или (XOR) .

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