Im Prinzip habe ich eine Liste von Fakten wie folgt aus:Prolog - einen Maximalwert von Satz aus einer Liste von Fakten bekommen (mit Prädikat gescheitert)
set(x,2).
set(x,7).
set(x,10).
set(x,4).
Ich brauche das maximale Element dieses Satzes zu finden.
Eingang: maximum(x, MaxElement)
Ausgang: MaxElement = 10.
Nun ist die Idee an sich ist nicht kompliziert und ich sah mich viele Beispiele online. Das Problem ist, dass ich das Prädikat fail verwenden muss.
Hier war meine Idee (was nicht funktioniert):
maximum(Set, Element1):-
set(Set,Element1),
set(Set,Element2),
Element2 > Element1,
fail.
maximum(Set, Element) :- set(Set, Element).
Die Idee dabei war, dass die erste Regel für jedes Element sieht, das ein größeres Element in der Menge hat. Wenn es ein größeres Element gibt, versagen wir und hören auf.
Dann würden wir im Idealfall für die größte (10) nicht scheitern und zur nächsten Regel übergehen, die nur sieht, dass sie in der Menge ist und wahr zurückgibt.
Aber so geht es immer noch zur zweiten Regel mit jeder Nummer. Auch Schnitt scheint nicht zu funktionieren.
Irgendwelche Ideen Leute?
Siehe auch [diese Frage] (http://stackoverflow.com/questions/27317069/Collect-all-Minimum-Lösungen-from-a-Prädikat) und die Antworten darauf. –