我需要用prolog写这些一阶语句。它们是如何编写的?红色(X)应返回false,绿色(X)应返回false,绿色(X)或红色(X)应返回true

我已经有了下面的代码:
% 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)).发布于 2012-03-16 05:52:28
你已经知道的Prolog中的'exists‘方法是什么?
这样如何:
red(X). % ∃x Red(x)
green(X). % ∃x Green(x)
(red(X) ; green(X)). % ∃x Red(x) v Green(x)Prolog将枚举满足每个调用或fail trying的X绑定。如果您只想测试它们的存在,而不是收集绑定,则可以忽略该变量并在第一个绑定后剪切,如下所示:
red(_), !.您还询问了如何测试某些东西是否完全是红色或绿色的,但不是两者都是。试试这个:
((\+ red(X), green(X)) ; (red(X), \+ green(X)). % ∃x Red(x) ⊻ Green(x)其中⊻表示exclusive-or (XOR)。
https://stackoverflow.com/questions/9728591
复制相似问题