具有两个列表的序言谓词

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].