2016-03-30 6 views
2

リスト[1,2,3,4,5]がある場合、どのように連続したペアを取得して操作できますか?たとえば、私は(1,2)を取得してdoSomethingを実行したいと思います。次の反復では、(2,3)などを取得したいと思います。私は最初の反復を行うことができますPrologリストの連続するペア

listpairs([H1,H2|T]):-doSomething(H1,H2), listpairs([H2,H3|T]). 

が、H2とH3を比較したとき、私はこだわっている:これは私がこれまで持っているものです。まず

答えて

2

、あなたが[1,2,3,4,5]を持っている場合は、[H1,H2|T]セットH1 = 1H2 = 2T = [3,4,5]。 H1とH2はあなたが作業したい2つの数字です。 [H2|T] = [2,3,4,5]は、計算を進めることができるリストを作成します。 (すべての後にそれはそれで再帰すると、あなたがしたい2次の番号を与える、2,3で始まる。)

だからあなたの再帰的な場合は、次のようになります。

listpairs([H1,H2|T]) :- doSomething(H1,H2), listpairs([H2|T]). 

すなわち:H1やH2を取り出し、それらと何かをしてから、H2を入れて再帰します。

第二に、あなたは一つだけの要素を持つための基本ケースを必要とするが、左:あなたはこれを省略した場合、リストには、例えばある場合

listpairs([H]). 

を、あなたは基本ケースに達することは決してないだろう私たちは常に1を戻すので、5つの要素。 (つまり、あなたは上の再帰リストは空になることはありません。)

+0

はあなたに感謝!私はそれが信じられない。 –

0

代わりに、明示的な「ループ」の、あなたはこの慣用的なアプローチを使用することができます。

forall(append(_,[X,Y|_],List), doSomething(X,Y)). 
関連する問題