列出不确定的事实

时间:2014-12-30 19:48:50

标签: prolog

我已经说明了可观察结果的程序事实,例如:

fact(fever)
fact(flu)

所以,在SICStus中,在断言事实后,我列出了事实,我得到了这个:

| ?- listing(fact).      
fact(fever).
fact(flu).

yes

| ? -

但是现在我想为这些事实添加不确定性,例如:

fact(fever) :: likely
fact(flu) :: certain

我的问题是,考虑到新添加的运算符" ::"如何列出事实。和不确定性?我尝试了很多不同的方式,比如

listing(fact(X) :: Y).

但它一直给我这样的错误:

! Type error in argument 1 of listing/1
! expected list of pred_spec_tree, but found fact(_4643)::_4639
! goal:  listing(user:(fact(_4643)::_4639))

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

为什么不使用像fact/2这样的元组谓词?

然后指定:

fact(fever,likely).
fact(flu,certain).

使用listing(fact).,您可以列出所有事实。

或者您可以使用findall运算符:

findall(::(X,Y),::(fact(X),Y),L).

如果要在两个参数之间使用::运算符,则需要注册它:

op(900, xfx, user:(::)).

其中900是优先级(与其他运算符相比,它有多紧,xfx模式和user:(::)运算符当然。但这实际上是更多的语法糖: Prolog像foo::bar这样的表达式实际上意味着谓词::/2应用于foobar因此:::(foo,bar)