27:-
'$do_error'/2
use_system_module(
'$_errors', []).
49 '$skip_list'(
NL,
L,
RL),
51 var(
RL)
-> '$do_error'(instantiation_error,sort(
L,
O))
;
52 '$do_error'(type_error(list,
L),sort(
L,
O))
62 '$skip_list'(
NO,
O,
RO),
63 (
RO == []
-> NO =< NL ;
65 '$do_error'(type_error(list,
O),sort(
L,
O))
95 '$skip_list'(
NL,
L,
RL),
97 var(
RL)
-> '$do_error'(instantiation_error,sort(
L,
O))
;
98 '$do_error'(type_error(list,
L),sort(
L,
O))
103 '$skip_list'(
NO,
O,
RO),
104 (
RO == []
-> NO =:= NL ;
105 var(
RO)
-> NO =< NL ;
106 '$do_error'(type_error(list,
O),sort(
L,
O))
112:-
meta_predicate '$keysort'
:predsort(
3,+,-).
134 predsort(
P,
N,
L,
_,
R1),
predsort,
137predsort(
P,
2, [
X1,
X2|L],
L,
R)
:- predsort,
138 call(
P,
Delta,
X1,
X2),
139 sort2(
Delta,
X1,
X2,
R).
140predsort(
_,
1, [
X|L],
L, [
X])
:- predsort.
141predsort(
_,
0,
L,
L, [])
:- predsort.
142predsort(
P,
N,
L1,
L3,
R)
:-
145 predsort(
P,
N1,
L1,
L2,
R1),
146 predsort(
P,
N2,
L2,
L3,
R2),
147 predmerge(
P,
R1,
R2,
R).
149sort2(<,
X1,
X2, [
X1,
X2]).
150sort2(=,
X1,
_, [
X1]).
151sort2(>,
X1,
X2, [
X2,
X1]).
153predmerge(
_, [],
R,
R)
:- predmerge.
154predmerge(
_,
R, [],
R)
:- predmerge.
155predmerge(
P, [
H1|T1], [
H2|T2],
Result)
:-
156 call(
P,
Delta,
H1,
H2),
157 predmerge(
Delta,
P,
H1,
H2,
T1,
T2,
Result).
159predmerge(>,
P,
H1,
H2,
T1,
T2, [
H2|R])
:-
160 predmerge(
P, [
H1|T1],
T2,
R).
161predmerge(=,
P,
H1,
_,
T1,
T2, [
H1|R])
:-
162 predmerge(
P,
T1,
T2,
R).
163predmerge(<,
P,
H1,
H2,
T1,
T2, [
H1|R])
:-
164 predmerge(
P,
T1, [
H2|T2],
R).
167
predsort(:Compare, +List, -Sorted) is det
call(+ Closure,...,? Ai,...)
plus(? Int1:int, ? Int2:int, ? Int3:int)