diff --git a/pl/init.yap b/pl/init.yap index 5039bbeca..21a272e4b 100644 --- a/pl/init.yap +++ b/pl/init.yap @@ -68,7 +68,6 @@ otherwise. 'modules.yap', % must follow grammar 'eval.yap', - 'lists.yap', 'signals.yap', 'profile.yap', 'callcount.yap', diff --git a/pl/modules.yap b/pl/modules.yap index af072c58c..901db0701 100644 --- a/pl/modules.yap +++ b/pl/modules.yap @@ -391,7 +391,7 @@ expand_goal(G, G). call(Dialect:index(Name,Arity,ExportingModI,_)), !, '$continue_imported'(ExportingMod, ExportingModI, G0, G), !. '$get_undefined_pred'(G, _ImportingMod, G0, ExportingMod) :- - autoloader:autoload, !, + autoloader:autoload, autoloader:find_predicate(G,ExportingModI), !, '$continue_imported'(ExportingMod, ExportingModI, G0, G), !. '$get_undefined_pred'(G, ImportingMod, G0, ExportingMod) :- diff --git a/pl/utils.yap b/pl/utils.yap index 2a26a0a30..6e47fa905 100644 --- a/pl/utils.yap +++ b/pl/utils.yap @@ -353,14 +353,40 @@ atomic_list_concat(L,At) :- atomic_concat(L, At). atomic_list_concat(L, El, At) :- + var(El), !, + '$do_error'(instantiation_error,atom_list_concat(L,El,At)). +atomic_list_concat(L, El, At) :- + nonvar(L), !, '$add_els'(L,El,LEl), atomic_concat(LEl, At). +atomic_list_concat(L, El, At) :- + nonvar(At), !, + atom_codes(At, S), + atom_codes(El, [ElS]), + '$split_elements'(S, ElS, SubS), + '$atomify_list'(SubS, L). '$add_els'([A,B|L],El,[A,El|NL]) :- !, '$add_els'([B|L],El,NL). '$add_els'(L,_,L). +'$split_elements'(E.S, E, SubS) :- !, + '$split_elements'(S, E, SubS). +'$split_elements'(E1.S, E, [E1|L].SubS) :- !, + '$split_elements'(S, E, L, SubS). +'$split_elements'([], _, []). +'$split_elements'([], _, [], []). +'$split_elements'(E.S, E, [], SubS) :- !, + '$split_elements'(S, E, SubS). +'$split_elements'(E1.S, E, E1.L, SubS) :- + '$split_elements'(S, E, L, SubS). + +'$atomify_list'([], []). +'$atomify_list'(S.SubS, A.L) :- + atom_codes(A, S), + '$atomify_list'(SubS, L). + atomic_concat(X,Y,At) :- ( nonvar(X), nonvar(Y)