具有两个列表的序言谓词
Prolog predicate with two lists
我是 prolog 的新手,正在尝试理解这个 prolog 代码。
next_truth_value([0|R],[1|R]).
next_truth_value([1|R],[0|S]) :- next_truth_value(R,S).
通过我的研究,我发现谓词包含两个列表。
如果我查询这个,我会得到这样的答案...
?- next_truth_value([0,0], NEXT).
NEXT = [1,0]
请有人解释这段代码,我完全无法理解这到底是什么意思。谢谢。
此代码正在计算下一个二进制数(反转)。如果您有一个二进制数 00,则下一个二进制数是 01(表示为 [1,0]
)。您的谓词会将零变为一,但如果已经有一个(如二进制数 01),则它必须在列表中进一步查找以找到零变为一。顺便说一句,此代码不适用于列表 [1,1]
,它会 return false。
您也可以使用相同的代码来查找以前的二进制数。如果您像这样使用谓词:next_truth_value(Prev,[1,0]).
,您将得到结果 [0,0]
.
我是 prolog 的新手,正在尝试理解这个 prolog 代码。
next_truth_value([0|R],[1|R]).
next_truth_value([1|R],[0|S]) :- next_truth_value(R,S).
通过我的研究,我发现谓词包含两个列表。 如果我查询这个,我会得到这样的答案...
?- next_truth_value([0,0], NEXT).
NEXT = [1,0]
请有人解释这段代码,我完全无法理解这到底是什么意思。谢谢。
此代码正在计算下一个二进制数(反转)。如果您有一个二进制数 00,则下一个二进制数是 01(表示为 [1,0]
)。您的谓词会将零变为一,但如果已经有一个(如二进制数 01),则它必须在列表中进一步查找以找到零变为一。顺便说一句,此代码不适用于列表 [1,1]
,它会 return false。
您也可以使用相同的代码来查找以前的二进制数。如果您像这样使用谓词:next_truth_value(Prev,[1,0]).
,您将得到结果 [0,0]
.