小编Dav*_*ell的帖子

Prolog 对列表进行成员资格操作,返回找到的元素的索引

我目前已经开始使用 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, …

functional-programming prolog

7
推荐指数
2
解决办法
381
查看次数

标签 统计

functional-programming ×1

prolog ×1