35:-
'$c_built_in'/4
use_system_module(
'$_arith', []).
39'$is_mt'(
H,
B,
HM,
_SM,
M, (context_module(
CM),
B),
CM)
:-
40 '$yap_strip_module'(
HM:H,
M,
NH),
41 '$module_transparent'(
_,
M,
_,
NH).
47'$clean_cuts'(!,true)
:- '$clean_cuts'.
48'$clean_cuts'(
G,(current_choice_point(
DCP),
NG))
:-
49 '$conj_has_cuts'(
G,
DCP,
NG,
OK),
OK == '$conj_has_cuts',
'$conj_has_cuts'.
52'$clean_cuts'(!,
_,true)
:- '$clean_cuts'.
53'$clean_cuts'(
G,
DCP,
NG)
:-
54 '$conj_has_cuts'(
G,
DCP,
NG,
OK),
OK == '$conj_has_cuts',
'$conj_has_cuts'.
57'$conj_has_cuts'(
V,
_,
V,
_)
:- var(
V),
var.
58'$conj_has_cuts'(!,
DCP,cut_by(
DCP), ok)
:- '$conj_has_cuts'.
59'$conj_has_cuts'((
G1,
G2),
DCP,(
NG1,
NG2),
OK)
:- '$conj_has_cuts',
60 '$conj_has_cuts'(
G1,
DCP,
NG1,
OK),
61 '$conj_has_cuts'(
G2,
DCP,
NG2,
OK).
62'$conj_has_cuts'((
G1;G2),
DCP,(
NG1;NG2),
OK)
:- '$conj_has_cuts',
63 '$conj_has_cuts'(
G1,
DCP,
NG1,
OK),
64 '$conj_has_cuts'(
G2,
DCP,
NG2,
OK).
65'$conj_has_cuts'((
G1->G2),
DCP,(
NG1->G2),
OK)
:- '$conj_has_cuts',
67 '$conj_has_cuts'(
G1,
DCP,
NG1,
OK).
68'$conj_has_cuts'((
G1*->G2),
DCP,(
NG1,
G2),
OK)
:- '$conj_has_cuts',
70 '$conj_has_cuts'(
G1,
DCP,
NG1,
OK).
71'$conj_has_cuts'(if(
G1,
G2,
G3),
DCP,if(
NG1,
G2,
G3),
OK)
:- '$conj_has_cuts',
73 '$conj_has_cuts'(
G1,
DCP,
NG1,
OK).
74'$conj_has_cuts'(
G,
_,
G,
_).
82'$module_u_vars'(
M,
H,
UVars)
:-
83 '$do_module_u_vars'(
M:H,
UVars).
85'$do_module_u_vars'(
M:H,
UVars)
:-
88 (
recorded(
'$m',
meta_predicate(
M,
D),
_)
->recorded
; recorded(
'$m',
meta_predicate(prolog,
D),
_)), !,
89 '$do_module_u_vars'(
N,
D,
H,
UVars).
90'$do_module_u_vars'(
_,[]).
92'$do_module_u_vars'(
0,
_,
_,[])
:- '$do_module_u_vars'.
93'$do_module_u_vars'(
I,
D,
H,
LF)
:-
95 arg(
I,
H,
A),
'$uvar'(
A,
LF,
L),
'$uvar',
97 '$do_module_u_vars'(
I1,
D,
H,
L).
98'$do_module_u_vars'(
I,
D,
H,
L)
:-
100 '$do_module_u_vars'(
I1,
D,
H,
L).
102'$uvar'(
Y, [
Y|L],
L)
:- var(
Y),
var.
104'$uvar'(
same(
G,
_),
LF,
L)
:-
106'$uvar'(
'^'(
_,
G),
LF,
L)
:-
109'$expand_args'([],
_, [],
_, []).
110'$expand_args'([
A|GArgs],
SM, [
':'|GDefs],
HVars, [
NMA|NGArgs])
:-
117 '$yap_strip_module'(
SM:A,
NM,
NA),
120 '$expand_args'(
GArgs,
SM,
GDefs,
HVars,
NGArgs).
121'$expand_args'([
A|GArgs],
SM, [
N|GDefs],
HVars, [
NA|NGArgs])
:-
135 '$expand_args'([
GG],
SM, [
0],
HVars, [
NA])
140 '$expand_args'([
IA],
SM, [
N],
HVars, [
JA])
142 '$expand_goals'(
A,
NA,
_,
SM,
SM,
SM,
HVars-t)
144 '$expand_args'(
GArgs,
SM,
GDefs,
HVars,
NGArgs).
145'$expand_args'([
A|GArgs],
SM, [
_N|GDefs],
HVars, [
A|NGArgs])
:-
146 '$expand_args'(
GArgs,
SM,
GDefs,
HVars,
NGArgs).
182'$expand_goals'(
V,call(
BM:V),call(
BM:V),
_HM,
_SM,
BM,
_HVarsH)
:-
184'$expand_goals'(
BM:G,call(
BM:G),call(
BM:G),
_HM,
_SM,
_,
_HVarsH)
:-
187'$expand_goals'(
BM:G,call(
BM:G),call(
BM:G),
_HM,
_SM,
_BM0,
_HVarsH)
:-
190'$expand_goals'((
A*->B;C),(
A1*->B1;C1),(
AO*->BO;CO),
191 HM,
SM,
BM,
HVars)
:- '$expand_goals',
192 '$expand_goals'(
A,
A1,
AOO,
HM,
SM,
BM,
HVars),
193 '$clean_cuts'(
AOO,
AO),
194 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars),
195 '$expand_goals'(
C,
C1,
CO,
HM,
SM,
BM,
HVars).
196'$expand_goals'((
A->B;C),(
A1->B1;C1),
198 HM,
SM,
BM,
HVars)
:- '$expand_goals',
199 '$expand_goals'(
A,
A1,
AOO,
HM,
SM,
BM,
HVars),
200 '$clean_cuts'(
AOO,
AO),
201 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars),
202 '$expand_goals'(
C,
C1,
CO,
HM,
SM,
BM,
HVars).
203'$expand_goals'(if(
A,
B,
C),if(
A1,
B1,
C1),
204 (current_choice_point(
CP0),
205 (current_choice_point(
CP),
AO,cut_at(
CP0,
CP),
BO; CO)),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
206 '$expand_goals'(
A,
A1,
AO0,
HM,
SM,
BM,
HVars),
207 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars),
208 '$expand_goals'(
C,
C1,
CO,
HM,
SM,
BM,
HVars),
209 '$clean_cuts'(
AO0,
CP,
AO).
210'$expand_goals'((
A,
B),(
A1,
B1),(
AO,
BO),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
211 '$expand_goals'(
A,
A1,
AO,
HM,
SM,
BM,
HVars),
212 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars).
213'$expand_goals'((
A;B),(
A1;B1),(
AO;BO),
HM,
SM,
BM,
HVars)
:- var(
A),
var,
214 '$expand_goals'(
A,
A1,
AO,
HM,
SM,
BM,
HVars),
215 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars).
216'$expand_goals'((
A|B),(
A1|B1),(
AO|BO),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
217 '$expand_goals'(
A,
A1,
AO,
HM,
SM,
BM,
HVars),
218 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars).
219'$expand_goals'((
A->B),(
A1->B1),(
AO-> BO),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
220 '$expand_goals'(
A,
A1,
AOO,
HM,
SM,
BM,
HVars),
221 '$clean_cuts'(
AOO,
AO),
222 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars).
223'$expand_goals'(
\+G,\+
G,
A\=B,
_HM,
_BM,
_SM,
_HVars)
:-
227'$expand_goals'(
\+A,\+
A1,(
AO-> fail
;true),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
228 '$expand_goals'(
A,
A1,
AOO,
HM,
SM,
BM,
HVars),
229 '$clean_cuts'(
AOO,
AO).
230'$expand_goals'(once(
A),once(
A1),
231 (
AO->true),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
232 '$expand_goals'(
A,
A1,
AO0,
HM,
SM,
BM,
HVars),
233 '$clean_cuts'(
AO0,
AO).
234'$expand_goals'((
:-A),(
:-A1),
235 (
:-AO),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
236 '$expand_goals'(
A,
A1,
AO,
HM,
SM,
BM,
HVars).
237'$expand_goals'(ignore(
A),ignore(
A1),
238 (
AO-> true
; true),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
239 '$expand_goals'(
A,
A1,
AO0,
HM,
SM,
BM,
HVars),
240 '$clean_cuts'(
AO0,
AO).
241'$expand_goals'(forall(
A,
B),forall(
A1,
B1),
242 \+( (
AO,\+ (
BO ) )),
243 HM,
SM,
BM,
HVars)
:- '$expand_goals',
244 '$expand_goals'(
A,
A1,
AO0,
HM,
SM,
BM,
HVars),
245 '$expand_goals'(
B,
B1,
BO0,
HM,
SM,
BM,
HVars),
246 '$clean_cuts'(
AO0,
AO),
247 '$clean_cuts'(
BO0,
BO).
248'$expand_goals'(
not(
A),
not(
A1),(current_choice_point(
CP),
AO,cut_by(
CP)
-> fail
; true),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
249 '$expand_goals'(
A,
A1,
AO,
HM,
SM,
BM,
HVars).
250'$expand_goals'((
A*->B),(
A1*->B1),(
AO,
BO),
HM,
SM,
BM,
HVars)
:- '$expand_goals',
251 '$expand_goals'(
A,
A1,
AO0,
HM,
SM,
BM,
HVars),
252 '$expand_goals'(
B,
B1,
BO,
HM,
SM,
BM,
HVars),
253 '$clean_cuts'(
AO0,
AO).
254'$expand_goals'(true,true,true,
_,
_,
_,
_)
:- '$expand_goals'.
255'$expand_goals'(fail,fail,fail,
_,
_,
_,
_)
:- '$expand_goals'.
256'$expand_goals'(false,false,false,
_,
_,
_,
_)
:- '$expand_goals'.
257'$expand_goals'(
G,
G1,
GO,
HM,
SM,
BM,
HVars)
:-
258 '$yap_strip_module'(
BM:G,
NBM,
GM),
259 '$expand_goal'(
GM,
G1,
GO,
HM,
SM,
NBM,
HVars).
262'$import_expansion'(
M:G,
M1:G1)
:-
263 '$imported_predicate'(
G,
M,
G1,
M1),
264 '$imported_predicate'.
265'$import_expansion'(
MG,
MG).
267'$meta_expansion'(
G,
_GM,
_SG,
SM,
_HVars,
OG)
:-
271'$meta_expansion'(
G,
GM,
_SG,
SM,
HVars,
OG)
:-
274 (
recorded(
'$m',
meta_predicate(
GM,
PredDef),
_)
275 ->recorded
;recorded(
'$m',
meta_predicate(prolog,
PredDef),
_)),
279 '$expand_args'(
LArgs,
SM,
LMs,
HVars,
OArgs),
283'$meta_expansion'(
G,
_GM,
_SG,
_SM,
_HVars,
G).
306 '$expand_goal'(
G0,
G1F,
GOF,
HM,
SM0,
BM0,
HVars-H)
:-
308 '$yap_strip_module'(
BM0:G0,
M0N,
G),
317 '$user_expansion'(
BM:G,
M1:G1),
318 '$import_expansion'(
M1:G1,
M2:G2),
319 '$meta_expansion'(
G2,
M2,
G1,
M1,
HVars,
G3),
320 '$match_mod'(
G3,
HM,
SM,
M2,
G1F),
321 '$c_built_in'(
G1F,
M2,
H,
GOF).
323'$user_expansion'(
M0N:G0N,
M1:G1)
:-
324 '_user_expand_goal'(
M0N:G0N,
M:G),
330 '$user_expansion'(
M:G,
M1:G1)
332'$user_expansion'(
MG,
MG).
334'$match_mod'(
G,
HMod,
SMod,
M,
O)
:-
336 '$is_metapredicate'(
G,
M)
340 '$is_system_predicate'(
G,prolog)
344 '$is_system_predicate'
== HMod,
'$is_system_predicate'
== SMod,
'$is_system_predicate'
== M
351'$build_up'(
HM,
NH,
SM, true,
NH, true,
NH)
:- HM == SM,
'$build_up'.
352'$build_up'(
HM,
NH,
_SM, true,
HM:NH, true,
HM:NH)
:- '$build_up'.
353'$build_up'(
HM,
NH,
SM,
B1, (
NH :- B1),
BO, (
NH :- BO))
:- HM == SM,
'$build_up'.
354'$build_up'(
HM,
NH,
_SM,
B1, (
NH :- B1),
BO, (
HM:NH :- BO))
:- '$build_up'.
356'$expand_goals'(
BM:G,
H,
HM,
_SM,
_BM,
B1,
BO)
:-
357 '$yap_strip_module'(
BM:G,
CM,
G1),
360 '$expand_goals'(call(
BM:G),
H,
HM,
_SM,
_BM,
B1,
BO)
362 '$expand_goals'(
G1,
H,
HM,
CM,
CM,
B1,
BO)
365'$expand_clause_body'(
V,
_NH1,
_HM1,
_SM,
M, call(
M:V), call(
M:V) )
:-
367'$expand_clause_body'(true,
_NH1,
_HM1,
_SM,
_M, true, true )
:- '$expand_clause_body'.
368'$expand_clause_body'(
B,
H,
HM,
SM,
M,
B1,
BO )
:-
369 '$module_u_vars'(
HM ,
H,
UVars),
374 '$is_mt'(
H,
B,
HM,
SM,
M,
IB,
BM)
378 M = BM,
'$expand_goals'(
B,
B1,
BO0,
HM,
SM,
BM,
UVars-H)
381 '$full_clause_optimisation'(
H,
BM,
BO0,
BO)
383 '$full_clause_optimisation'
392'$not_imported'(
H,
Mod)
:-
393 recorded(
'$import',
'$import'(
NM,
Mod,
NH,
H,
_,
_),
R),
399'$not_imported'(
_,
_).
402'$verify_import'(
M:G,
NM:NG)
:-
403 '$follow_import_chain'(
M,
G,
NM,
NG).
406'$expand_meta_call'(
M0:G,
HVars,
M:GF )
:-
408 '$yap_strip_module'(
M0:G,
M,
IG),
409 '$expand_goals'(
IG,
GF,
_GF0,
M,
M,
M,
HVars-IG).
410'$expand_meta_call'(
G,
HVars,
M:GF )
:-
412 '$yap_strip_module'(
SM0:G,
M,
IG),
413 '$expand_goals'(
IG,
GF,
_GF0,
SM,
SM,
M,
HVars-IG).
416'$expand_a_clause'(
MHB,
SM0,
Cl1,
ClO)
:-
417 '$yap_strip_module'(
SM0:MHB,
SM,
HB),
418 '$head_and_body'(
HB,
H,
B),
419 '$yap_strip_module'(
SM:H,
HM,
NH),
420 '$not_imported'(
NH,
HM),
421 '$yap_strip_module'(
SM:B,
BM,
B0),
422 '$expand_clause_body'(
B0,
NH,
HM,
SM0,
BM,
B1,
BO),
423 '$expand_clause_body',
424 '$build_up'(
HM,
NH,
SM0,
B1,
Cl1,
BO,
ClO).
425'$expand_a_clause'(
Cl,
_SM,
Cl,
Cl).
445expand_goal(
Input,
Output)
:-
446 '$expand_meta_call'(
Input, [],
Output ).
print_message(+ Severity, +Term)
identical_member(?Element, ?Set)