我是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]
请有人解释这段代码,我完全无法理解这是什么意思。谢谢。
答案 0 :(得分:2)
此代码正在计算下一个二进制数(反向)。如果您的二进制数为00,则下一个二进制数为01(表示为[1,0]
)。你的谓词会将零变为一,但如果已经存在一个(如二进制数01),则必须在列表中进一步查找零以变为一。顺便说一下,此代码对列表[1,1]
不起作用,它将返回false。
您也可以使用相同的代码查找以前的二进制数。如果您使用这样的谓词:next_truth_value(Prev,[1,0]).
,您将得到结果[0,0]
。