簡體   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