Prolog迭代列表

时间:2015-06-12 10:03:45

标签: list prolog iteration head

我们说我有清单Xs = [a,b,c]. 现在我想遍历所有元素并为这些元素调用另一个函数。我的问题是:如何使用头部和尾部这样做?我很感激你的帮助。

1 个答案:

答案 0 :(得分:10)

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

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

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

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

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