2016-04-27 27 views
0

Ich habe ein Prädikat erstellt, das überprüft, ob alle Elemente in einer Liste eine Bedingung erfüllen.Prolog-Liste, überprüfen Sie die Einträge in der Liste

Für dieses Beispiel überprüft das Prädikat, dass alle Elemente in Vielfachen von zwei Check_Multiples/1 sind, was recht gut funktioniert.

Wie würde ich überprüfen, welches Element am Anfang oder am Ende der Liste hinzugefügt werden könnte, und immer noch das Prädikat erfüllen?

Ich versuche, die Rückkehr eine Liste zu machen.

Zum Beispiel:

[2,4,6] 

sollte zurückkehren [8] als (wie das Prädikat nicht 0 erlaubt)

[6,8,10] 

zurückkehren sollte [4,12]

+3

Wenn das Prädikat gleich , wie zum Beispiel 'Check_Multiples/1', ist richtig definiert mit CLP (FD) und hat wohldefinierte Regeln, was das Prädikat bedeutet, dann wäre dies einfach,' begin_or_end (L, BE): - append (L, [Y] , L1), findeall (X, (Check_Multiples ([X | L]); Check_Multiples (L1)), BE) .'. – lurker

+0

Hoppla, das sein sollte, 'begin_or_end (L, BE): - Findenall (X, (Check_Multiples ([X | L]); Anhängen (L, [X], L1), Check_Multiples (L1)), BE) .' – lurker

+0

Vielen Dank für Ihre Antwort, ich werde das versuchen. Ich fürchte, ich weiß nicht, was CLD ist und muss noch mehr lesen. Meine naive Herangehensweise war, zu versuchen, das Prädikat Check_Multiples mit einer Variablen sowohl vor als auch nach der Liste aufzurufen. – John

Antwort

0

Der folgende Code sollte es tun, gegeben Check_Multiples prüft, ob jedes Element der Liste in aufsteigender Reihenfolge ein Vielfaches von zwei ist. Ich vermute, dass eine Bedingung war, sonst, wenn Listen wie [4, 6, 4, 4, 8] waren Sie gerade erlaubt könnten überprüfen, ob jedes Element Modul 2 bis 0.

additionsToList([H|T], ResultList) :- 
    Check_Multiples([H|T]), 
    firstElement(H, First), 
    lastElement(T, Last), 
    append([First],[Last], Z), 
    flatten(Z, ResultList). 

firstElement(2, []). 
firstElement(First, X) :- 
    X is First-2. 

lastElement([H|[]], X) :- 
    X is H+2. 
lastElement([_|T], X) :- 
    lastElement(T, X). 
Verwandte Themen