2012-04-14 18 views
1

ich versuche, eine Prologs Liste der ersten beiden Elemente in Rekursion .. zum Beispiel zu schreiben:Schreiben Liste der ersten Elemente

wenn ich

List:[a,b,c,d,e,f] 

wenn ich eingeben

first_two(F,S,List). 
It returns 
F:a, S:b ; 
F:b, S:c ; 
F:c, S:d ; 
F:d, S:e ; 
F:e, S:f . 

Ich versuche dies zu tun mit:

first_two(F,S,[F|[S|Tail]]):-first_two(F,S,Tail). 

aber es funktioniert nicht ..

Vielen Dank ..

+1

first_zwei (F, S, [F | [S | Schwanz]]): - first_two (F, S, Tail). – Palindrom

+0

Eigentlich habe ich mit Rekursion versucht, aber vielleicht kann es auf andere Weise gemacht werden, die ich nicht finden kann – Palindrom

Antwort

2

vergessen hat, den Basisfall der Rekursion, also die Abbruchbedingung:

first_two(F, S, [F, S|_Tail]). 
first_two(F, S, [_|Tail]) :- 
    first_two(F, S, Tail). 

ich habe auch Vereinfachungs Ihre Regel, mit freundlicher Syntax und Abstand.

Ich bevorzuge einfacheren Code zu lesen, nicht wahr?

+0

Das ist, was ich suche .. Danke a loooottt :) – Palindrom

+0

Nur eine Frage: Ich denke, ich bekomme diese Kündigung nicht .. Was macht es mit diesem Code? Wann endet es? Kannst du das erklären ... Wird es für jede Rekursion benötigt? – Palindrom

+0

Sie haben den rekursiven Teil geschrieben, aber Sie haben die Stop-Bedingung verpasst, die Scott Hunter vorgeschlagen hat, aber (IMHO) in fehlgeleiteter Weise. Ohne diese "Tatsache" führt Prolog die Rekursion aus, aber wenn man sich der Endliste nähert, weiß es nicht, * was zutrifft. – CapelliC

2

Wenn alles, was Sie die ersten beiden ist wollen, dann Ihre Lösung ziemlich nahe ist, muss aber nicht die Rekursion:

first_two(F, S, [F|[S|_]]). 
+0

es geben nur die ersten zwei .. aber ich muss andere Kombinationen von zwei nach der Reduzierung ersten Elements sehen – Palindrom

Verwandte Themen