2016-03-30 28 views
2

Eğer bir listem var ise [1,2,3,4,5], ardışık çiftleri nasıl alabilirim ve üzerinde bir işlem yapabilirim? Örneğin, (1,2) almak ve bunlara bir şeyler yapmak istiyorum. Sonraki iterasyonda, (2,3), vb. Almak istiyorum.Prolog listesi ardışık çift

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

ben ilk yineleme yapabilir ancak H2 ve H3 karşılaştırırken takıldım: Bu defa ne var. Öncelikle

cevap

2

, sen [1,2,3,4,5] var ise, o zaman [H1,H2|T] setleri H1 = 1, H2 = 2, T = [3,4,5]. H1 ve H2, üzerinde çalışmak istediğiniz iki sayıdır. [H2|T] = [2,3,4,5], hesaplamak için devam edebileceğiniz listeyi yapar. (. O size istediğiniz iki yanındaki numaralar verecek o kadar recursing, sonuçta 2,3 ile başlar)

Yani özyinelemeli durum olmalıdır:

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

Yani: H1 alın ve dışarı H2 Onlarla bir şeyler yap, sonra H2'i geri koy ve tekrarla. İkincisi

, yalnızca bir eleman sol sahibi olmak için bir taban kutusu gerekecek: Bu atlarsanız liste örn varsa

listpairs([H]). 

, bir baz davayı ulaşmak asla 5 element, biz her zaman 1 geri koydu. (Yanı, üzerinde Recurse liste boş olmayacak.) Yerine açık 'loop' arasında

+0

teşekkür ederim! Bunun olduğuna inanamıyorum. –

0

, bu deyimsel yaklaşımı kullanabilirsiniz:

forall(append(_,[X,Y|_],List), doSomething(X,Y)).