首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog Exists函数

问Prolog Exists函数
EN

Stack Overflow用户
提问于 2012-03-16 05:38:56
回答 1查看 5K关注 0票数 1

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

​

​

我已经有了下面的代码:

代码语言:javascript
复制
% 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)).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-16 05:52:28

你已经知道的Prolog中的'exists‘方法是什么?

这样如何:

代码语言:javascript
复制
red(X).               % ∃x Red(x)
green(X).             % ∃x Green(x)
(red(X) ; green(X)).  % ∃x Red(x) v Green(x)

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

代码语言:javascript
复制
red(_), !.

您还询问了如何测试某些东西是否完全是红色或绿色的,但不是两者都是。试试这个:

代码语言:javascript
复制
((\+ red(X), green(X)) ; (red(X), \+ green(X)).  % ∃x Red(x) ⊻ Green(x)

其中⊻表示exclusive-or (XOR)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9728591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档