Ich habe versucht, eine Liste der Struktur zu sortieren.Prolog Sortierung einer Liste der Struktur, arithmetischer Fehler
Die Struktur ist wie dies
% person(Name, Weight).
person(tom, 65).
person(dan, 70).
person(mike, 80).
Und die Liste wie dies
List = [person(tom, 65), person(dan, 70), person(mike, 80)].
Ich mag die Liste sortieren von größtem Gewicht zu dest wäre. Wie folgt aus:
SortList = [person(mike, 80), person(dan, 70), person(tom, 65)].
Bisher habe ich dies:
sortListPerson([], []).
sortListPerson([person(NameP, WP)|Rest], Result):-
sortListPerson(Rest, List),
insertPerson(person(NameP, WP), List, Result).
insertPerson(person(NameP, WP), [], [person(NameP, WP)]).
insertPerson(person(NameP1, WP1), [person(NameP2, WP2)|Rest], [person(NameP1, WP1)|List]):-
integer(WP1),
integer(WP2),
WP1 @>= WP2,
insertPerson(person(NameP2, WP2), Rest, List).
insertPerson(person(NameP1, WP1), [person(NameP2, WP2)|Rest], [person(NameP2, WP2)|List]):-
integer(WP1),
integer(WP2),
WP1 @< WP2,
insertInPlace(person(NameP1, WP1), Rest, List).
ich mit einer Liste von zwei Personen versucht haben und es funktioniert:
?- sortListPerson([person(a, 10), person(b, 30)], SortList).
SortList = [person(b,30),person(a,10)] ? ;
Aber wenn ich versuche, mit einem Liste von 3 oder mehr Personen erscheint ein Fehler:
?- sortListPerson([person(a, 10), person(b, 30), person(c, 40)], SortList).
{ERROR: arithmetic:>=/2 - expected an arithmetically evaluable expression, found person(a,10)}
no
?-
Kann jemand helfen?
Sie eigentlich nicht haben 'Person (Name (Weight). 'Geschrieben als eine Tatsache, oder? – lurker
Ich sehe nicht, dass '> =/2 'irgendwo in dem Code verwendet wird, den Sie anzeigen, aber der Fehler bezieht sich eindeutig auf diesen Operator. Vielleicht gibt es ein Problem in Ihrem 'insertInPlace/3' Prädikat, das nicht gezeigt wird. – lurker
@Danick: Gibt es einen Grund, warum Sie das Tag [tag: clpfd] bearbeitet haben? Es scheint für Ihre Frage relevant zu sein; http://stackoverflow.com/tags/clpfd/info. – Matt