, , , . , . : " ". . :
?- list_sortedby2([range(2,3),range(10,9),range(-2,-30),range(-5,-30)], Us).
Us = [range(-5,-30),range(-2,-30),range(2,3),range(10,9)].
, !
:- use_module(library(lambda)).
list_sortedby2(Ts, Us) :-
must_be_ground(Ts),
maplist(\T^(A2+T)^arg(2,T,A2), Ts, A2Ts), % or map1(Ts, A2Ts)
sort(A2Ts, A2Us),
maplist(\ (_+U)^U^true, A2Us, Us). % or map2(A2Us, Us)
must_be_ground(Ss) :-
( ground(Ss) -> true
; throw(error(instantiation_error,_))
).
maplist/3 & lambda; :
map1([], []).
map1([T|Ts], [A2+T|A2Ts]) :-
arg(2, T, A2),
map1(Ts, A2Ts).
map2([], []).
map2([_+U|A2Us], [U|Us]) :-
map2(A2Us, Us).
- : arg(2, T, A2) ( T = range(_, A2) ), range/2. , list_sortedby2([f(1,2)], Us) , . ( , , , .)