0
プロローグの結果をリストの最後の要素でソートする方法は、;
を押すと1つずつ返します。Prolog - 結果をソートして1つずつ返す
私は、点Aと点Bとの間の中間ルートと列車と方向のリストを返す述語route_with_total_dist/3
を持っています。総距離が最後の要素です。たとえば:
?- route_with_total_dist(alexanderplatz, prinzenstrasse, R).
R = [[[alexanderplatz, u2, wittenbergplatz, ruhleben], [wittenbergplatz, u1, prinzenstrasse, 'warschauer strasse']], 11400] ;
R = [[[alexanderplatz, u2, wittenbergplatz, ruhleben], [wittenbergplatz, u3, nollendorfplatz, nollendorfplatz], [nollendorfplatz, u1, prinzenstrasse, 'warschauer strasse']], 11400] ;
R = [[[alexanderplatz, u2, nollendorfplatz, ruhleben], [nollendorfplatz, u1, prinzenstrasse, 'warschauer strasse']], 9800] ;
R = [[[alexanderplatz, u2, nollendorfplatz, ruhleben], [nollendorfplatz, u3, wittenbergplatz, 'krumme lanke'], [wittenbergplatz, u1, prinzenstrasse, 'warschauer strasse']], 11400] ;
R = [[[alexanderplatz, u2, gleisdreieck, ruhleben], [gleisdreieck, u1, prinzenstrasse, 'warschauer strasse']], 6900] ;
R = [[[alexanderplatz, u2, stadtmitte, ruhleben], [stadtmitte, u6, 'hallesches tor', 'alt-mariendorf'], ['hallesches tor', u1, prinzenstrasse, 'warschauer strasse']], 5000] ;
R = [[[alexanderplatz, u8, 'kottbusser tor', hermannstrasse], ['kottbusser tor', u1, prinzenstrasse, uhlandstrasse]], 3900] ;
false.
は、今私は総距離(最初の最短距離)である最後の要素により、これらの結果をソート、それでも一つずつ返されるの選択肢を残したいと思います。私はfindall/3
またはbagof/3
を実行してからsort/2
を行うことができることを知っていますが、これは一度にすべて印刷される膨大なリストを私に残します。
上記の例で(偶然にも)、結果は、私が望むのと正反対に表示されます。予想されるのは:
R = [[[alexanderplatz, u8, 'kottbusser tor', hermannstrasse], ['kottbusser tor', u1, prinzenstrasse, uhlandstrasse]], 3900] ;
[[[alexanderplatz, u2, stadtmitte, ruhleben], [stadtmitte, u6, 'hallesches tor', 'alt-mariendorf'], ['hallesches tor', u1, prinzenstrasse, 'warschauer strasse']], 5000] ;
R = [[[alexanderplatz, u2, gleisdreieck, ruhleben], [gleisdreieck, u1, prinzenstrasse, 'warschauer strasse']], 6900] ;
...
...
どのようにするのですか?