Prolog-遍历列表

Prolog-iterating through list

假设我有列表Xs = [a,b,c]. 现在我想遍历所有元素并为此元素调用另一个函数。我的问题是:如何使用 head 和 tail 来做到这一点?我将不胜感激。

通常,您不会在 Prolog 中进行迭代。相反,您编写一个带有一对递归子句的规则,如下所示:

 dosomething([]).
 dosomething([H|T]) :- process(H), dosomething(T).

当列表 [] 为空时,第一个子句处理基本情况。在这种情况下,没有什么可做的,所以规则的主体也是空的。

第二个子句处理列表至少有一个元素的情况。语法 [H|T] 与您的列表统一,使 H 成为列表的头部,而 T 成为列表的尾部。例如,如果您处理 dosomething([a,b,c])H 将变为 a,而 T 将变为 [b,c]

这条规则的正文有两部分。第一部分对头部进行操作,在其上调用 process。这是您要为列表的每个元素执行的规则。第二部分在列表的尾部递归调用 dosomething 规则。当尾列表不为空时,dosomething 的第二个子句将与较短的列表结合以继续处理。当尾列表为空时,第一个子句将合并,从而结束处理。