2016-11-27 3 views
1

Ich implementiere einen Algorithmus, der alle Pfade zwischen zwei Städten in eine Liste einfügt. Diese Liste speichert den Pfad und den Gesamtpreis, den dieser Pfad kostet. Die Liste sieht wie folgt aus:Kann ich mit findall wissen, welches Element einer Liste den niedrigsten Preis hat?

[(12, [A,B,C,D]), (15, [B,C,D,E]), ... ] 

Nachdem ich alle Wege in dieser Liste habe ich möchte wissen, welche von ihnen die am wenigsten teuer ist. Ich weiß, dass ich das selbst machen könnte, aber ich frage mich, ob es irgendeinen Weg geben könnte, um diese Aufgabe zu erledigen.

+0

Sie können. Sie benötigen ein Prädikat, um den Pfad zu durchlaufen, und ein anderes Prädikat, um die Kosten parallel in ': Goal' von' findall (+ Template,: Goal, -Bag) 'zu berechnen. '+ Template' ist Ihre Stadtliste und' -Bag' sind Ihre gesammelten Ergebnisse. –

Antwort

0

Ich nehme an, Sie haben ein behauptet Daten Prädikat ähnlich wie:

insert_data :- 
    assert(cities(CITYA,3)), assert(cities(CITYB,2)). 

Und das, was Sie wollen könnte, ist so etwas wie:

my_query(City, L) :-findall(Name, (cities(City,Weight), 
    setup(City1,Weight1), 
    setup(City2,Weight2), 
    Weight2-Weight1),L),!. 
Verwandte Themen