它们存在吗?他们是如何实施的?
所述coroutining SWI-Prolog的(的谓词freeze
,when
,dif
等)具有的功能警卫.它们如何适合首选的Prolog编程风格?
我是很新的逻辑编程(有序言和共)和事实,即它不是纯粹的声明,并要求即使在非常简单的情况下程序上的考虑有点困惑(见本关于使用问题\==
或dif
).我错过了重要的事吗?
看看以下目标(我使用来自Markus Triska的clpfd的swi-prolog):
result(Input,Result) :-
Input #> 10,
Result=decline.
result(Input,Result) :-
Input in 0..20,
Result=offer.
Run Code Online (Sandbox Code Playgroud)
可能的查询如下所示:
?- result(15,B).
B = decline ;
B = offer.
Run Code Online (Sandbox Code Playgroud)
我想添加订单或某种解决方案优先级.如果"拒绝"是有效的响应Input=15
,则不应再考虑第二个目标,因此只有B=decline
解决方案而不是B=offer
.
我知道我可以添加一个!/0
然后反过来也行不通.给我这个谓词的所有可能答案.
考虑到这个例子,a Result=offer
应该只适用于Input 0..10
,否则应该触发较高的先前下降目标.
当我尝试在谓词中考虑订单时,我是否认为太迫切了?