我们说我有清单Xs = [a,b,c].
现在我想遍历所有元素并为这些元素调用另一个函数。我的问题是:如何使用头部和尾部这样做?我很感激你的帮助。
答案 0 :(得分:10)
通常,您不会在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
的第二个子句将与较短的列表统一以继续处理。当尾部列表为空时,第一个子句将统一,从而结束处理。