什么是 ”!”在Prolog

时间:2016-01-09 12:48:53

标签: list prolog prolog-cut

有人可以解释一下“!”在Prolog做什么?我不明白。 在这里,我有一个代码,用于计算异构列表中有多少个山地方面的子列表。

nrSubliste([], 0).
nrSubliste([H|T], R):-
    is_list(H),
    munteMain(H),!,
    nrSubliste(T, R1),
    R is R1 + 1.
nrSubliste([_|T], R):-
    nrSubliste(T, R).

munteMain验证线性列表是否具有山峰方面。

1 个答案:

答案 0 :(得分:1)

感叹号!表示Prolog中的Cut,这是一个始终成功的特殊目标,并阻止回溯所有可能有替代品的分支。

在您的情况下,这意味着一旦找到munteMain/1的解决方案,该程序将永远不会回溯并寻找替代解决方案。具体来说,如果nrSubliste/2中的_H成功的话

请注意,使用munteMain(H)会使您的代码更难以阅读和维护,因为第三个子句中的逻辑取决于第二个子句的逻辑。您可以使用不可证明的 operator \+重写您的程序而无需削减:

!