Ich habe diesen Code zum Aufspalten der Eingangsliste in seine Hälften. Es scheint in Ordnung zu sein.Verständnis der Spaltung in Swi-Prolog
halve(List,A,B) :- halve(List,List,A,B), !.
halve(B,[],[],B).
halve(B,[_],[],B).
halve([H|T],[_,_|T2],[H|A],B) :-halve(T,T2,A,B).
Ok, also habe ich versucht, es zu dekodieren. Der Anfang ist klar:
"Halve nahm Liste und 2 Logikvariablen" ist dies:
halve(List,A,B)
(1) Dann kontinuierlicher dieser Teil:
:- halve(List,List,A,B).
Und das bedeutet, dass ich bin Erstellen von zwei neuen Listen (Liste, Liste) von der ersten oder was? Was exacly stellt ": -" dar? Ich denke die neuen Listen = Hälften werden das A und B sein, oder?
(2) Zweitens, bitte, ich verstehe nicht ganz, diese beiden Linien erhalten:
halve(B,[],[],B).
halve(B,[_],[],B).
Vielleicht erklären Sie könnte es auf einige Beispiele, bitte?
(3) Nun, ich hoffe, nach der Erklärung von (1) und (2), werde ich den letzten Teil von mir bekommen ...
halve([H|T],[_,_|T2],[H|A],B) :- halve(T,T2,A,B).
Danke sehr, sehr viel für die Unterstützung mich.
Ok, unser erstes Problem hat bereits seine Lösung. Lange Rede kurzer Sinn, es funktioniert wie folgt aus:
halve([1,2,3,4,5],[1,2],[3,4,5]).
->true
Wenn Sie bemerken, dass es die Liste in seiner Hälften teilt, aber wenn die Liste eine ungerade Anzahl der Elemente hat, die zweite Hälfte ist die größere.
Jetzt was ich erhalten möchte, ist der erste größere zu haben.
diese So etwa ich denke:
ich dies erreichen werde:
Halves_div([1,2,3],A,B).
A=[1,2],
B=[3].
Lassen Sie uns meine Eingabe sagen Liste: [1,2,3]. Also werde ich mit dem Aufspalten der Listen Kopf und Schwanz beginnen: [H|T]
und dann werde ich die H
mit der neuen leeren Liste zusammenführen - meine 1. Hälfte (A
). Danach habe ich A = [1], B = [] und Input = [2,3].
für das Zusammenführen ich habe:
merge([],List,List).
merge([H|T],List,[H|New]) :- merge(T,List,New).
Und noch etwas - ich brauche die erste Hälfte bereits zu prüfen, ob von> = 2. Hälfte, nicht wahr?
Also das ist meine Idee und das Einzige, was ich gerne hätte, wenn du mir hilfst, ist es in Prolog zu schreiben. Ich bin irgendwie verwirrt, wie man es zusammensetzt.
Danke!
Es scheint, dass meine Idee der Lösung zu kompliziert ist und ich etwas besseres gefunden habe!
Sie nicht kno was ": -" steht? Hast du jemals ein Programm im Prolog gemacht? – whd
Ok, ok ... "can_be_wrong (X): - Mensch (X)." Die Klausel kann gelesen werden als "X (ich) könnte falsch falsch, wenn X (ich bin) ein Mensch". –
Siehe auch [diese verwandte Frage] (http://stackoverflow.com/a/8176512/772868). – false