我已经说明了可观察结果的程序事实,例如:
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))
有什么建议吗?
答案 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
应用于foo
和bar
因此:::(foo,bar)
。