Remove lib_toplevel.pl

This commit is contained in:
Nicolas Luck
2023-09-15 11:01:16 +02:00
parent 7c83a1fb8e
commit c86304b18e
2 changed files with 1 additions and 208 deletions

View File

@@ -1,207 +0,0 @@
:- module('$toplevel', [argv/1,
copy_term/3]).
:- use_module(library(atts), [call_residue_vars/2]).
:- use_module(library(charsio)).
:- use_module(library(error)).
:- use_module(library(iso_ext)).
:- use_module(library(lambda)).
:- use_module(library(lists)).
:- use_module(library(si)).
:- use_module(library('$project_atts')).
:- use_module(library('$atts')).
:- dynamic(disabled_init_file/0).
:- dynamic(argv/1).
arg_type(g).
arg_type(t).
arg_type(g(_)).
arg_type(t(_)).
trailing_period_is_ambiguous(Value) :-
atom(Value),
atom_chars(Value, ValueChars),
list_last_item(ValueChars, Char),
ValueChars \== ['.'],
graphic_token_char(Char).
graphic_token_char(C) :-
memberchk(C, ['#', '$', '&', '*', '+', '-', '.', ('/'), ':',
'<', '=', '>', '?', '@', '^', '~', ('\\')]).
needs_bracketing(Value, Op) :-
catch((functor(Value, F, _),
current_op(EqPrec, EqSpec, Op),
current_op(FPrec, _, F)),
_,
false),
( EqPrec < FPrec ->
true
; FPrec > 0, F == Value, graphic_token_char(F) ->
true
; F \== '.', '$quoted_token'(F) ->
true
; EqPrec == FPrec,
memberchk(EqSpec, [fx,xfx,yfx])
).
write_goal(G, VarList, MaxDepth) :-
( G = (Var = Value) ->
( var(Value) ->
select((Var = _), VarList, NewVarList)
; VarList = NewVarList
),
write(Var),
write(' = '),
( needs_bracketing(Value, (=)) ->
write('('),
write_term(Value, [quoted(true), variable_names(NewVarList), max_depth(MaxDepth), double_quotes(true)]),
write(')')
; write_term(Value, [quoted(true), variable_names(NewVarList), max_depth(MaxDepth), double_quotes(true)])
)
; G == [] ->
write('true')
; write_term(G, [quoted(true), variable_names(VarList), max_depth(MaxDepth)])
).
write_last_goal(G, VarList, MaxDepth) :-
( G = (Var = Value) ->
( var(Value) ->
select((Var = _), VarList, NewVarList)
; VarList = NewVarList
),
write(Var),
write(' = '),
( needs_bracketing(Value, (=)) ->
write('('),
write_term(Value, [quoted(true), variable_names(NewVarList), max_depth(MaxDepth), double_quotes(true)]),
write(')')
; write_term(Value, [quoted(true), variable_names(NewVarList), max_depth(MaxDepth), double_quotes(true)]),
( trailing_period_is_ambiguous(Value) ->
write(' ')
; true
)
)
; G == [] ->
write('true')
; write_term(G, [quoted(true), variable_names(VarList), max_depth(MaxDepth)])
).
write_eq((G1, G2), VarList, MaxDepth) :-
!,
write_goal(G1, VarList, MaxDepth),
write(', '),
write_eq(G2, VarList, MaxDepth).
write_eq(G, VarList, MaxDepth) :-
write_last_goal(G, VarList, MaxDepth).
list_last_item([C], C) :- !.
list_last_item([_|Cs], D) :-
list_last_item(Cs, D).
term_variables_under_max_depth(Term, MaxDepth, Vars) :-
'$term_variables_under_max_depth'(Term, MaxDepth, Vars).
gather_query_vars([_ = Var | Vars], QueryVars) :-
( var(Var) ->
QueryVars = [Var | QueryVars0],
gather_query_vars(Vars, QueryVars0)
;
gather_query_vars(Vars, QueryVars)
).
gather_query_vars([], []).
gather_equations([], _, []).
gather_equations([Var = Value | Pairs], OrigVarList, Goals) :-
( var(Value) ->
( eq_member(Value, OrigVarList),
select_all(Pairs, Var, Value, [_ | VarEqs], NewPairs) ->
append([Var = Value | VarEqs], Goals0, Goals),
gather_equations(NewPairs, OrigVarList, Goals0)
;
gather_equations(Pairs, OrigVarList, Goals)
)
;
Goals = [Var = Value | Goals0],
gather_equations(Pairs, OrigVarList, Goals0)
).
print_exception(E) :-
( E == error('$interrupt_thrown', repl) -> nl % print the
% exception on a
% newline to evade
% "^C".
; true
),
loader:write_error(E),
nl.
run_input_once :-
bb_put('$report_all', true),
catch(read_and_match_all_results, E, print_exception(E)).
read_and_match_all_results :-
'$read_query_term'(_, Term, _, _, VarList),
bb_put('$answer_count', 0),
submit_query_and_print_all_results(Term, VarList).
submit_query_and_print_all_results(Term, VarList) :-
'$get_b_value'(B),
bb_put('$report_all', true),
bb_put('$report_n_more', 100),
call(user:Term),
write_eqs(B, VarList),
!.
submit_query_and_print_all_results(_, _) :-
( bb_get('$answer_count', 0) ->
write(' ')
; true
),
write('false.'),
nl.
write_eqs(B, VarList) :-
gather_query_vars(VarList, OrigVars),
% one layer of depth added for (=/2) functor
'$term_variables_under_max_depth'(OrigVars, 22, Vars0),
'$term_attributed_variables'(VarList, AttrVars),
'$project_atts':project_attributes(Vars0, AttrVars),
copy_term(AttrVars, AttrVars, AttrGoals),
term_variables(AttrGoals, AttrGoalVars),
append([Vars0, AttrGoalVars, AttrVars], Vars),
charsio:extend_var_list(Vars, VarList, NewVarList, fabricated),
'$get_b_value'(B0),
gather_equations(NewVarList, OrigVars, Equations),
append(Equations, AttrGoals, Goals),
% one layer of depth added for (=/2) functor
maplist(\Term^Vs^term_variables_under_max_depth(Term, 22, Vs), Equations, EquationVars),
% maplist(term_variables_under_max_depth(22), Equations, EquationVars),
append([AttrGoalVars | EquationVars], Vars1),
term_variables(Vars1, Vars2), % deduplicate vars of Vars1 but preserve their order.
charsio:extend_var_list(Vars2, VarList, NewVarList0, fabricated),
bb_get('$answer_count', Count),
( Count =:= 0 ->
write(' ')
; true
),
Count1 is Count + 1,
bb_put('$answer_count', Count1),
( B0 == B ->
( Goals == [] ->
write('true.'), nl
; loader:thread_goals(Goals, ThreadedGoals, (',')),
write_eq(ThreadedGoals, NewVarList0, 200000),
write('.'),
nl
)
; loader:thread_goals(Goals, ThreadedGoals, (',')),
write_eq(ThreadedGoals, NewVarList0, 200000),
write(';'), nl, false
).

View File

@@ -19,7 +19,7 @@ use super::{
impl Machine {
pub fn new_lib() -> Self {
Machine::new(MachineConfig::in_memory().with_toplevel(include_str!("../lib_toplevel.pl")))
Machine::new(MachineConfig::in_memory())
}
pub fn load_module_string(&mut self, module_name: &str, program: String) {