假设我有一个列表
Xs = [a,b,c]
,现在我想要遍历所有元素,并对这些元素调用另一个函数。我的问题是:如何使用头和尾来实现这个功能?感谢您的帮助。通常情况下,你不会在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
的第二条规则将与更短的列表相统一以继续处理。当尾部列表为空时,第一条规则将相统一,从而结束处理过程。maplist(process, [a,b,c])
和maplist/3
、maplist/4
等函数。 - falsemaplist/2
,并且永远不会回头。 - Sergey Kalinichenko
head
和tail
的限制,您可以通过使用fail
和析取来简单地遍历列表元素:member(X, [1,2,3,4]), writeln(X), fail; true.
将逐个打印列表元素,并且目标将会成功。 - Fibo Kowalsky