gpt4 book ai didi

Prolog:变量名前的 's' 代表什么?

转载 作者:行者123 更新时间:2023-12-02 09:29:58 24 4
gpt4 key购买 nike

作为大学要求的一部分,我正在 Prolog 中编写 Mastermind 求解器(我正在使用 SWI-Prolog)。我以前从未使用过 Prolog 编程,所以如果我可能没有使用正确的术语,请原谅。

我在增加黑白计数器时遇到问题(代表有多少颜色处于正确位置,以及有多少颜色在代码中但位置错误)。

我在网上找到了这个例子(完整代码here):

determine_blacks([],[],[],[],0).
determine_blacks([Color|Try],[Color|Code],ReducedTry,ReducedCode,s Black) :-
determine_blacks(Try,Code,ReducedTry,ReducedCode,Black).
determine_blacks([Color1|Try],[Color2|Code],
[Color1|ReducedTry],[Color2|ReducedCode],Black) :-
color(_,Color1), color(_,Color2),
\+(Color1 == Color2),
determine_blacks(Try,Code,ReducedTry,ReducedCode,Black).

我想知道:“s Black”(第2行)中的's'代表什么?我注意到,如果删除它,计数器将停止递增。所以我想这在某种程度上可以解决问题,但我在文档中找不到它。

如果您能解释一下'\+'(第7行)应该做什么,我也将不胜感激。这段代码对于我的水平来说有点太高级了,我正在努力解决它......

最佳答案

本身s(或任何其他仿函数,就此而言)没有任何内在含义。

它的含义取决于它在 Prolog 代码(和查询)中的使用方式。


MASTERMIND.PL讲述您的问题链接到的源代码,一元前缀运算符 s/1 被用于extend_code/1(第 110 行)、finished/1(第 #173 行)、define_blacks/5(第 #231 行)和 define_whites/5(第 247 行)。

s/1 在第 #54 行被定义为一元前缀运算符1:

:- op(150, fy, s).

所有这一切都允许我们编写 s s s 0 而不是 s(s(s(0)))

在我看来,这没有任何好处


脚注 1: 有关 Prolog 运算符的更多信息,请阅读 this part of the SICStus Prolog manual .

关于Prolog:变量名前的 's' 代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251833/

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