【发布时间】:2016-06-10 13:53:52
【问题描述】:
我正在尝试定义一个谓词adjacent(X, Y, Zs),如果 X 和 Y 在列表中相邻,则该谓词为真。我的代码目前是这样的:
adjacent(_, _, []).
adjacent(X, Y, [X, Y|Tail]) :-
adjacent(X,Y, Tail).
它适用于adjacent(c, d, [a, b, c, d, e]) 的基本情况,但由于基本情况,所有其他情况也返回 true,我坚持这一点。
另一个问题是,如果 X 不等于列表头部的第一部分,那么它会跳过 X 和 Y 并转到下一个“X”;例如,如果 c 不等于 a,那么它会跳过 a 和 b 并检查是否c 等于 c。这是有问题的,例如,列表是
[a, c, d, e]
因为它最终从不检查 c(我相信)。
我不知道如何调和这两个问题,并将我对需要发生的事情的逻辑理解转化为代码。
编辑:感谢 Christian Hujer 的回答,我的基本情况错误已得到纠正,所以现在我只停留在第二个问题上。
【问题讨论】:
标签: list recursion prolog traversal