Prolog存在功能

Rya*_*n S 2 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)).
Run Code Online (Sandbox Code Playgroud)

sha*_*rky 5

您已经知道的Prolog中的“存在”方法是什么?

怎么样:

red(X).               % ?x Red(x)
green(X).             % ?x Green(x)
(red(X) ; green(X)).  % ?x Red(x) v Green(x)
Run Code Online (Sandbox Code Playgroud)

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

red(_), !.
Run Code Online (Sandbox Code Playgroud)

您还询问了如何测试某物是红色还是绿色,但不是全部都是红色。尝试这个:

((\+ red(X), green(X)) ; (red(X), \+ green(X)).  % ?x Red(x) ? Green(x)
Run Code Online (Sandbox Code Playgroud)

其中?表示异或(XOR)