我目前已经开始使用 PROLOG,我想编写一个谓词来检查给定对象是否在此列表中。如果对象在列表中,谓词应返回元素的索引。如果未找到该元素,则应返回 0。
它应该像这样工作:find(3,[1,4,5,3,2,3],N). -> yes. N / 4
find(2,[1,3,4,5,6,7],N). -> yes. N / 0
但我在计算索引 N 时遇到问题,也许这里有人可以提供帮助。我见过很多不同的方式来遍历列表,但我发现了很多不同的方式,但我无法理解它们是如何工作的。如果有人能够提供解决方案并解释其工作原理和原因,我将非常高兴。
这是我到目前为止所写的:
find(X, [X|TAIL], N) :- N is 1, write(N).
find(X, [], N) :- N is 0, write(N).
find(X, [_|TAIL], N) :- find(X, TAIL, N + 1).
Run Code Online (Sandbox Code Playgroud)
它适用于基本情况:
find(a, [a, b, c, d, e, f, g], N) -> yes. N / 1.
find(j, [a, b, c, d, e, f, g], N) -> yes. N / 0.
Run Code Online (Sandbox Code Playgroud)
但是当它开始递归时它就不再工作了,我不明白出了什么问题。
对于递归情况,它给了我这个: find(b, [a, b, c, …