Merge branch 'master' into sockets-develop
This commit is contained in:
@@ -7424,6 +7424,10 @@ intervals_to_drep([A0-B0|Rest], Drep0, Drep) :-
|
|||||||
),
|
),
|
||||||
intervals_to_drep(Rest, Drep0 \/ D1, Drep).
|
intervals_to_drep(Rest, Drep0 \/ D1, Drep).
|
||||||
|
|
||||||
|
attribute_goals(X) -->
|
||||||
|
{ get_atts(X, queue(_,_)) },
|
||||||
|
!,
|
||||||
|
{ put_atts(X, -queue(_,_)) }.
|
||||||
attribute_goals(X) -->
|
attribute_goals(X) -->
|
||||||
% { get_attr(X, clpz, Attr), format("A: ~w\n", [Attr]) },
|
% { get_attr(X, clpz, Attr), format("A: ~w\n", [Attr]) },
|
||||||
{ get_attr(X, clpz, clpz_attr(_,_,_,Dom,fd_props(Gs,Bs,Os),_)),
|
{ get_attr(X, clpz, clpz_attr(_,_,_,Dom,fd_props(Gs,Bs,Os),_)),
|
||||||
|
|||||||
@@ -763,14 +763,14 @@ impl ListingCompiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn generate_init_goal_code(
|
fn generate_init_goal_code(
|
||||||
&mut self,
|
&mut self,
|
||||||
) -> Result<Code, SessionError> {
|
) -> Result<Code, SessionError> {
|
||||||
let query_terms = mem::replace(&mut self.initialization_goals.0, vec![]);
|
let query_terms = mem::replace(&mut self.initialization_goals.0, vec![]);
|
||||||
let queue = mem::replace(&mut self.initialization_goals.1, VecDeque::new());
|
let queue = mem::replace(&mut self.initialization_goals.1, VecDeque::new());
|
||||||
|
|
||||||
compile_query(query_terms, queue)
|
compile_query(query_terms, queue)
|
||||||
.map(|(code, _)| code)
|
.map(|(code, _)| code)
|
||||||
.map_err(SessionError::from)
|
.map_err(SessionError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_code_index(
|
fn set_code_index(
|
||||||
@@ -1143,7 +1143,8 @@ impl ListingCompiler {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn gather_items(
|
pub(crate)
|
||||||
|
fn gather_items(
|
||||||
&mut self,
|
&mut self,
|
||||||
wam: &mut Machine,
|
wam: &mut Machine,
|
||||||
src: &mut ParsingStream<Stream>,
|
src: &mut ParsingStream<Stream>,
|
||||||
@@ -1339,7 +1340,7 @@ fn compile_work_impl(
|
|||||||
let init_goal_code = compiler.generate_init_goal_code()?;
|
let init_goal_code = compiler.generate_init_goal_code()?;
|
||||||
|
|
||||||
if init_goal_code.len() > 0 {
|
if init_goal_code.len() > 0 {
|
||||||
if !wam.run_init_code(init_goal_code) {
|
if !wam.run_init_code(init_goal_code) {
|
||||||
println!("Warning: initialization goal for {} failed",
|
println!("Warning: initialization goal for {} failed",
|
||||||
compiler.listing_src.name());
|
compiler.listing_src.name());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -454,15 +454,6 @@ impl Machine {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
compile_user_module(&mut wam,
|
|
||||||
Stream::from(ORDSETS),
|
|
||||||
true,
|
|
||||||
ListingSource::from_file_and_path(
|
|
||||||
clause_name!("si"),
|
|
||||||
lib_path.clone(),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if wam.compile_top_level().is_err() {
|
if wam.compile_top_level().is_err() {
|
||||||
panic!("Loading '$toplevel' module failed");
|
panic!("Loading '$toplevel' module failed");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
:- use_module(library(charsio)).
|
:- use_module(library(charsio)).
|
||||||
:- use_module(library(lists)).
|
:- use_module(library(lists)).
|
||||||
:- use_module(library(ordsets)).
|
|
||||||
:- use_module(library(si)).
|
:- use_module(library(si)).
|
||||||
|
|
||||||
:- dynamic(argv/1).
|
:- dynamic(argv/1).
|
||||||
@@ -231,10 +230,13 @@ trailing_period_is_ambiguous(Value) :-
|
|||||||
write_eqs_and_read_input(B, VarList) :-
|
write_eqs_and_read_input(B, VarList) :-
|
||||||
term_variables(VarList, Vars0),
|
term_variables(VarList, Vars0),
|
||||||
'$term_attributed_variables'(VarList, AttrVars),
|
'$term_attributed_variables'(VarList, AttrVars),
|
||||||
append(Vars0, AttrVars, Vars),
|
copy_term(AttrVars, AttrVars, AttrGoals),
|
||||||
|
term_variables(AttrGoals, AttrGoalVars),
|
||||||
|
append([Vars0, AttrVars, AttrGoalVars], Vars),
|
||||||
charsio:extend_var_list(Vars, VarList, NewVarList, fabricated),
|
charsio:extend_var_list(Vars, VarList, NewVarList, fabricated),
|
||||||
'$get_b_value'(B0),
|
'$get_b_value'(B0),
|
||||||
gather_goals(NewVarList, NewVarList, VarList, Goals),
|
gather_query_vars(VarList, OrigVars),
|
||||||
|
gather_equations(NewVarList, OrigVars, Goals, AttrGoals),
|
||||||
( bb_get('$first_answer', true) ->
|
( bb_get('$first_answer', true) ->
|
||||||
write(' '),
|
write(' '),
|
||||||
bb_put('$first_answer', false)
|
bb_put('$first_answer', false)
|
||||||
@@ -285,43 +287,49 @@ help_message :-
|
|||||||
|
|
||||||
gather_query_vars([_ = Var | Vars], QueryVars) :-
|
gather_query_vars([_ = Var | Vars], QueryVars) :-
|
||||||
( var(Var) ->
|
( var(Var) ->
|
||||||
QueryVars = [Var | QueryVars1],
|
QueryVars = [Var | QueryVars0],
|
||||||
gather_query_vars(Vars, QueryVars1)
|
gather_query_vars(Vars, QueryVars0)
|
||||||
; gather_query_vars(Vars, QueryVars)
|
; gather_query_vars(Vars, QueryVars)
|
||||||
).
|
).
|
||||||
gather_query_vars([], []).
|
gather_query_vars([], []).
|
||||||
|
|
||||||
is_a_different_variable([_ = Binding | Pairs], Value) :-
|
is_a_different_variable([_ = Binding | Pairs], Value) :-
|
||||||
( Value == Binding, !
|
( Value == Binding, !
|
||||||
; is_a_different_variable(Pairs, Value)
|
; is_a_different_variable(Pairs, Var)
|
||||||
).
|
).
|
||||||
|
|
||||||
filter_goals([Goal|Goals], FGoals, QueryVars) :-
|
eq_member(X, [Y|_]) :- X == Y, !.
|
||||||
term_variables(Goal, GoalVars0),
|
eq_member(X, [_|Ys]) :- eq_member(X, Ys).
|
||||||
sort(GoalVars0, GoalVars),
|
|
||||||
( ord_intersect(GoalVars, QueryVars) ->
|
|
||||||
append(GoalVars, QueryVars, QueryVars0),
|
|
||||||
sort(QueryVars0, QueryVars1),
|
|
||||||
FGoals = [Goal | FGoals0],
|
|
||||||
filter_goals(Goals, FGoals0, QueryVars1)
|
|
||||||
;
|
|
||||||
filter_goals(Goals, FGoals, QueryVars)
|
|
||||||
).
|
|
||||||
filter_goals([], [], _).
|
|
||||||
|
|
||||||
gather_goals([], VarList, QueryVarList, Goals) :-
|
gather_equations([], _, Goals, Goals).
|
||||||
gather_query_vars(VarList, Vars),
|
gather_equations([Var = Value | Pairs], OrigVarList, Goals, Goals1) :-
|
||||||
term_variables(QueryVarList, QueryVars),
|
( var(Value) ->
|
||||||
copy_term(Vars, Vars, Goals0),
|
eq_member(Value, OrigVarList),
|
||||||
filter_goals(Goals0, Goals, QueryVars).
|
( ( Pairs == [], NewPairs = []
|
||||||
gather_goals([Var = Value | Pairs], VarList, QueryVarList, Goals) :-
|
; ( select((OtherVar = OtherValue), Pairs, NewPairs),
|
||||||
|
Value == OtherValue, Var \== OtherVar
|
||||||
|
)
|
||||||
|
) ->
|
||||||
|
Goals = [Var = Value | Goals0],
|
||||||
|
gather_equations(NewPairs, OrigVarList, Goals0, Goals1)
|
||||||
|
; gather_equations(Pairs, OrigVarList, Goals, Goals1)
|
||||||
|
)
|
||||||
|
; Goals = [Var = Value | Goals0],
|
||||||
|
gather_equations(Pairs, OrigVarList, Goals0, Goals1)
|
||||||
|
).
|
||||||
|
|
||||||
|
/*
|
||||||
|
gather_equations([], MasterList, Goals, Goals).
|
||||||
|
gather_equations([Var = Value | Pairs], MasterList, Goals, Goals1) :-
|
||||||
( ( nonvar(Value)
|
( ( nonvar(Value)
|
||||||
; is_a_different_variable(Pairs, Value)
|
; select((Var = _), MasterList, MasterPairs),
|
||||||
|
is_a_different_variable(MasterPairs, Value)
|
||||||
) ->
|
) ->
|
||||||
Goals = [Var = Value | Goals0],
|
Goals = [Var = Value | Goals0],
|
||||||
gather_goals(Pairs, VarList, QueryVarList, Goals0)
|
gather_equations(Pairs, MasterList, Goals0, Goals1)
|
||||||
; gather_goals(Pairs, VarList, QueryVarList, Goals)
|
; gather_equations(Pairs, MasterList, Goals, Goals1)
|
||||||
).
|
).
|
||||||
|
*/
|
||||||
|
|
||||||
print_exception(E) :-
|
print_exception(E) :-
|
||||||
( E == error('$interrupt_thrown', repl) -> nl % print the
|
( E == error('$interrupt_thrown', repl) -> nl % print the
|
||||||
|
|||||||
Reference in New Issue
Block a user