[英]Prolog list consecutive pairs
如果我有一个列表 [1,2,3,4,5],我怎样才能获得连续的对并对它们执行操作? 例如,我想获得 (1,2) 并对它们执行 doSomething。 在下一次迭代中,我想得到 (2,3),依此类推。 这是我到目前为止:
listpairs([H1,H2|T]):-doSomething(H1,H2), listpairs([H2,H3|T]).
我可以进行第一次迭代,但在比较 H2 和 H3 时我卡住了。
首先,如果你有[1,2,3,4,5]
,那么[H1,H2|T]
设置H1 = 1
, H2 = 2
, T = [3,4,5]
。 H1 和 H2 是您想要处理的两个数字。 [H2|T] = [2,3,4,5]
是您可以继续计算的列表。 (毕竟它以 2,3 开头,所以递归它会给你你想要的两个下一个数字。)
所以你的递归情况应该是:
listpairs([H1,H2|T]) :- doSomething(H1,H2), listpairs([H2|T]).
即:把H1和H2拿出来,用它们做点什么,然后把H2放回去,递归。
其次,您需要一个只剩下一个元素的基本情况:
listpairs([H]).
如果你忽略这一点,如果列表有例如 5 个元素,你将永远不会达到基本情况,因为我们总是把 1 放回去。 (即,您递归的列表永远不会为空。)
您可以使用这种惯用的方法,而不是显式的“循环”:
forall(append(_,[X,Y|_],List), doSomething(X,Y)).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.