【问题标题】:Prolog predicate with two lists带有两个列表的 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]

请有人解释一下这段代码,我完全无法理解它的真正含义。谢谢。

【问题讨论】:

  • 那么你在哪里找到这个?它真正应该做什么?一定有比你给我们更多的上下文......(为了理解到底发生了什么,你可以尝试在顶层跟踪:?- trace.,尽管许多人考虑跟踪 Prolog 程序软弱的迹象)。
  • 首先感谢您的回复。它产生下一个真值。假设我们给出了 (0,0),它将生成下一个真值作为 (1,0)...这是完整的代码...sourceforge.net/p/prologassignmentnsbmcolombo/code/ci/master/…
  • 那么剩下的代码你看懂了吗?谁写的?你不能问他们吗?

标签: prolog


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多