Arbeiten mit SWI-Prolog. Ich habe eine Liste der Reihen sagen:Erhalten Sie Wiederholungsantworten beim Vergleich von Fakten in Prolog
rank(London, 3.5).
rank(New York, 3.5).
rank(Seattle, 2.3).
Und ich versuche, meinen Kopf zu bekommen um eine Regel zu machen, die Drucke/Tatsachen mit dem gleichen Rang zurück. Also in diesem Fall würde es mit London & New York zurückkommen.
Hier ist, was ich bisher gefunden habe, das einzige Problem ist die Duplikate, die ich damit bekomme (obwohl sie mit der aktuellen Regel vollkommen Sinn machen). Würde die Rekursion irgendwie helfen?
equal_rank(_):-
rank(U1, R1),
rank(U2, R2),
U1 \== U2,
R1 == R2,
print(R1), print(': '), print(U1), print(', '), print(U2), nl,
fail.
würde der Ausgang sein:
3.5: London, New York
3.5: New York, London
Ich kann einfach nicht herausfinden, wie diese zweite Linie zu stoppen.
Ein kleiner Kommentar zu den vielen unbequemen "print/1" -Aufrufen: Verwenden Sie stattdessen format/2: Format ("~ w: ~ w, ~ w \ n", [R1, U1, U2]) gibt Ihnen genau das gleiche Ergebnis und ist viel einfacher zu lesen und zu schreiben. – mat