首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SWI中的查询中可以使用";“吗?

在SWI中的查询中可以使用";“吗?
EN

Stack Overflow用户
提问于 2021-04-26 06:57:56
回答 1查看 50关注 0票数 0

我对Prolog很陌生,我现在正在学习SWI-Prolog,我想知道我是否可以在查询中使用";“来表示分离性查询条件,例如,我编写了这个查询

代码语言:javascript
复制
?-p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null)

并希望检查是否存在p/3事实,其中

  1. 第一个术语应该是常数"a";

  1. 第二个术语应该是常量"b“或null;

  1. 第三个术语应该是常量"c“或null.

我想知道这是否是进行查询的正确方式,以及是否存在一个更简洁的形式,比如

代码语言:javascript
复制
?-p(a,(b;null),(c;null))

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-26 10:46:51

是的你可以。

编写查询

代码语言:javascript
复制
p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

?-提示符之后,添加子句的一种更直接的方式

代码语言:javascript
复制
myquery(V1,V2) :- p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

然后问

代码语言:javascript
复制
?- myquery(V1,V2).

(myquery/2是一个新创建的任意谓词)。

顺便提一句,这个条款

代码语言:javascript
复制
myquery(V1,V2) :- p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

也可以写成“成倍”,即:

代码语言:javascript
复制
myquery :- p(a,b,c).
myquery :- p(a,b,null).
myquery :- p(a,null,c).
myquery :- p(a,null,null).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67262106

复制
相关文章

相似问题

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