Prolog存在功能

时间:2012-03-15 21:38:56

标签: prolog

我需要在prolog中写这些第一顺序语句。怎么写? red(X)应该返回false,green(X)应该返回false,而green(X)或red(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 个答案:

答案 0 :(得分:5)

你已经知道Prolog中的'存在'方法是什么?

怎么样:

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

Prolog将枚举满足每个调用的X绑定,或fail trying。如果你只想测试它们的存在而不是收集绑定,你可以忽略变量并在第一次绑定后剪切,如下所示:

red(_), !.

您还问过如何测试某些东西是红色还是绿色,但不是两者都有。试试这个:

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

表示exclusive-or (XOR)