是否可以使用&引用;在SWI Prolog中的查询中?

是否可以使用&引用;在SWI Prolog中的查询中?,prolog,Prolog,我是Prolog新手,现在正在学习SWI Prolog,我想知道我是否可以在查询中使用“;”来表示析取查询条件,例如,我编写了这个查询 ?-p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null) 要检查是否存在p/3事实,其中 第一项应为常数“a” 第二项应为常数“b”或null 第三项应为常数“c”或null 我想知道这是否是进行查询的正确方法,是否存在像maybe这样更简洁的表单 ?-p(a,(b;null),(c;null)) 谢谢 是的,你可以 编写查

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

?-p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null)
要检查是否存在p/3事实,其中

  • 第一项应为常数“a”

  • 第二项应为常数“b”或null

  • 第三项应为常数“c”或null

  • 我想知道这是否是进行查询的正确方法,是否存在像maybe这样更简洁的表单

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

    是的,你可以

    编写查询

    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) :- p(a,V1,V2),(V1=b;V1=null),(V2=c;V2=null).
    
    然后问

    myquery/2
    在这里是一个新创建的任意谓词)

    顺便提一下,该条款

    myquery(V1,V2) :- 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:-p(a,b,c)。
    myquery:-p(a,b,null)。
    myquery:-p(a,null,c)。
    myquery:-p(a,null,null)。
    
    是,此处的“null”仅表示一个常量,可以用任何其他常量符号替换。