繁体   English   中英

Prolog 列出连续对

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM