2017-03-23 21 views
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] ; 
... 
... 

どのようにするのですか?

答えて

2

「1つ1つ」の場合、バックトラッキングを意味する場合はmember/2を使用できます。

routes_one_by_one(A, B, R) :- route_with_total_dist(A, B, List), member(R, List). 
関連する問題