我一直在跑这个运营商。下面是一个示例,一个使用插入排序对整数列表进行排序的谓词。
inser(A,[],[A],P).
inser(A,[H|L],R,P):- P(A,H),append([A,H],L,R),!.
inser(A,[H|L],[H|R],P):- inser(A,L,R,P).
sortin([],[],P).
sortin([H|L],Re,P):- sortin(L,R,P),inser(H,R,Re,P).
我是Prolog的新手。
答案 0 :(得分:3)
这被称为 cut 。引自SWI-Prolog documentation page:
剪切。放弃自进入剪切出现的谓词后创建的所有选择点。换句话说,提交剪切出现的子句并丢弃当前子句中剪切左侧目标创建的选择点
该名称是描述性的WRT Prolog的抽象计算模型,它构建一个证明树,试图以明确定义的顺序满足所有条件。削减修剪潜在分支,应用替代规则可能需要。
在你的inser / 3谓词中,这意味着第三个句子将不尝试如果 P(A,H)成功且追加([A,H],L,R)也成功。
请注意,P(A,H)
无效Prolog语法。您应该使用call(P,A,H)来调用P
比较谓词。