【问题标题】:Is it possible to use ";" in a query in SWI-Prolog?是否可以使用“;”在 SWI-Prolog 的查询中?
【发布时间】:2021-04-26 06:57:56
【问题描述】:

我是 Prolog 新手,现在正在学习 SWI-Prolog,我想知道我是否可以使用“;”在查询中表达析取查询条件,例如,我写了这个查询

?-p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null)

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

  1. 第一项应该是常数“a”;

  2. 第二项应该是常量“b”或空;

  3. 第三项应该是常量“c”或 null。

我想知道这是否是进行查询的正确方法,是否存在更简洁的形式,例如可能

?-p(a,(b;null),(c;null))

谢谢!

【问题讨论】:

  • 是的,这里的“null”只是代表一个常数,可以用其他任何常数符号代替。

标签: prolog


【解决方案1】:

是的,你可以。

编写查询

p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

?- 提示符之后只是添加子句的更直接的方式

myquery(V1,V2) :- p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

然后然后询问

?- myquery(V1,V2).

myquery/2 是一个新出现的任意谓词)。

顺便说一句,从句

myquery(V1,V2) :- p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).

也可以写成“相乘”,即:

myquery :- p(a,b,c).
myquery :- p(a,b,null).
myquery :- p(a,null,c).
myquery :- p(a,null,null).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多