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