gpt4 book ai didi

list - 什么是Prolog中的 “!”

转载 作者:行者123 更新时间:2023-12-01 03:36:06 26 4
gpt4 key购买 nike

有人可以解释一下“!”的含义吗?在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验证线性列表是否具有山脉特征。

最佳答案

感叹号!在Prolog中表示Cut,这是一个始终成功的特殊目标,它阻止了其上所有可能具有替代方法的分支的回溯。

在您的情况下,这意味着一旦找到munteMain/1的解决方案,该程序就不会回溯并寻找替代解决方案。具体来说,如果第二个子句中的nrSubliste/2可以使_成功,则Prolog永远不会考虑H规则的第三子句,即使用munteMain(H)的忽略列表头。

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

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

nrSubliste([H|T], R):-
is_list(H),
\+ munteMain(H),
nrSubliste(T, R).

关于list - 什么是Prolog中的 “!”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com