Prolog谓词有两个列表

时间:2015-05-08 05:52:26

标签: 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]

请有人解释这段代码,我完全无法理解这是什么意思。谢谢。

1 个答案:

答案 0 :(得分:2)

此代码正在计算下一个二进制数(反向)。如果您的二进制数为00,则下一个二进制数为01(表示为[1,0])。你的谓词会将零变为一,但如果已经存在一个(如二进制数01),则必须在列表中进一步查找零以变为一。顺便说一下,此代码对列表[1,1]不起作用,它将返回false。

您也可以使用相同的代码查找以前的二进制数。如果您使用这样的谓词:next_truth_value(Prev,[1,0]).,您将得到结果[0,0]