【发布时间】:2009-11-13 16:17:57
【问题描述】:
我有一个问题想问你一些关于代码 sn-p 的问题:
insert_pq(State, [], [State]) :- !.
insert_pq(State, [H|Tail], [State, H|Tail]) :-
precedes(State, H).
insert_pq(State, [H|T], [H|Tnew]) :-
insert_pq(State, T, Tnew).
precedes(X, Y) :- X < Y. % < needs to be defined depending on problem
该函数非常清楚地将一个项目添加到优先级队列中。我遇到的问题是第一行中的切断运算符。大概每当调用到达这行代码时,这是查询的唯一可能解决方案,并且函数调用将简单地展开(或者它结束了?),没有必要回溯并搜索另一个解决方案查询。
所以这里的截断是多余的。我的推论正确吗?
【问题讨论】: