add halt/0
This commit is contained in:
@@ -174,6 +174,7 @@ The following predicates are built-in to Scryer.
|
|||||||
* `gen_nat/1`
|
* `gen_nat/1`
|
||||||
* `goal_expansion/2`
|
* `goal_expansion/2`
|
||||||
* `ground/1`
|
* `ground/1`
|
||||||
|
* `halt/0`
|
||||||
* `integer/1`
|
* `integer/1`
|
||||||
* `is_list/1`
|
* `is_list/1`
|
||||||
* `is_partial_string/1`
|
* `is_partial_string/1`
|
||||||
|
|||||||
@@ -160,6 +160,7 @@ pub enum SystemClauseType {
|
|||||||
GetClause,
|
GetClause,
|
||||||
GetCurrentPredicateList,
|
GetCurrentPredicateList,
|
||||||
GetModuleClause,
|
GetModuleClause,
|
||||||
|
Halt,
|
||||||
ModuleHeadIsDynamic,
|
ModuleHeadIsDynamic,
|
||||||
GetLiftedHeapFromOffset,
|
GetLiftedHeapFromOffset,
|
||||||
GetLiftedHeapFromOffsetDiff,
|
GetLiftedHeapFromOffsetDiff,
|
||||||
@@ -234,6 +235,7 @@ impl SystemClauseType {
|
|||||||
&SystemClauseType::GetDoubleQuotes => clause_name!("$get_double_quotes"),
|
&SystemClauseType::GetDoubleQuotes => clause_name!("$get_double_quotes"),
|
||||||
&SystemClauseType::GetModuleClause => clause_name!("$get_module_clause"),
|
&SystemClauseType::GetModuleClause => clause_name!("$get_module_clause"),
|
||||||
&SystemClauseType::GetSCCCleaner => clause_name!("$get_scc_cleaner"),
|
&SystemClauseType::GetSCCCleaner => clause_name!("$get_scc_cleaner"),
|
||||||
|
&SystemClauseType::Halt => clause_name!("$halt"),
|
||||||
&SystemClauseType::HeadIsDynamic => clause_name!("$head_is_dynamic"),
|
&SystemClauseType::HeadIsDynamic => clause_name!("$head_is_dynamic"),
|
||||||
&SystemClauseType::InstallSCCCleaner => clause_name!("$install_scc_cleaner"),
|
&SystemClauseType::InstallSCCCleaner => clause_name!("$install_scc_cleaner"),
|
||||||
&SystemClauseType::InstallInferenceCounter => clause_name!("$install_inference_counter"),
|
&SystemClauseType::InstallInferenceCounter => clause_name!("$install_inference_counter"),
|
||||||
@@ -302,6 +304,7 @@ impl SystemClauseType {
|
|||||||
("$get_lh_from_offset_diff", 3) => Some(SystemClauseType::GetLiftedHeapFromOffsetDiff),
|
("$get_lh_from_offset_diff", 3) => Some(SystemClauseType::GetLiftedHeapFromOffsetDiff),
|
||||||
("$get_double_quotes", 1) => Some(SystemClauseType::GetDoubleQuotes),
|
("$get_double_quotes", 1) => Some(SystemClauseType::GetDoubleQuotes),
|
||||||
("$get_scc_cleaner", 1) => Some(SystemClauseType::GetSCCCleaner),
|
("$get_scc_cleaner", 1) => Some(SystemClauseType::GetSCCCleaner),
|
||||||
|
("$halt", 0) => Some(SystemClauseType::Halt),
|
||||||
("$head_is_dynamic", 1) => Some(SystemClauseType::HeadIsDynamic),
|
("$head_is_dynamic", 1) => Some(SystemClauseType::HeadIsDynamic),
|
||||||
("$install_scc_cleaner", 2) => Some(SystemClauseType::InstallSCCCleaner),
|
("$install_scc_cleaner", 2) => Some(SystemClauseType::InstallSCCCleaner),
|
||||||
("$install_inference_counter", 3) => Some(SystemClauseType::InstallInferenceCounter),
|
("$install_inference_counter", 3) => Some(SystemClauseType::InstallInferenceCounter),
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
assertz/1, bagof/3, bb_b_put/2, bb_get/2, bb_put/2,
|
assertz/1, bagof/3, bb_b_put/2, bb_get/2, bb_put/2,
|
||||||
call_cleanup/2, call_with_inference_limit/3, catch/3,
|
call_cleanup/2, call_with_inference_limit/3, catch/3,
|
||||||
clause/2, current_predicate/1, current_prolog_flag/2,
|
clause/2, current_predicate/1, current_prolog_flag/2,
|
||||||
expand_goal/2, expand_term/2, findall/3, findall/4, once/1,
|
expand_goal/2, expand_term/2, findall/3, findall/4, halt/0,
|
||||||
repeat/0, retract/1, set_prolog_flag/2, setof/3,
|
once/1, repeat/0, retract/1, set_prolog_flag/2, setof/3,
|
||||||
setup_call_cleanup/3, term_variables/2, throw/1, true/0,
|
setup_call_cleanup/3, term_variables/2, throw/1, true/0,
|
||||||
false/0, write/1, write_canonical/1, writeq/1, write_term/2]).
|
false/0, write/1, write_canonical/1, writeq/1, write_term/2]).
|
||||||
|
|
||||||
@@ -753,3 +753,5 @@ reset_global_var_at_key(Key) :- '$reset_global_var_at_key'(Key).
|
|||||||
|
|
||||||
bb_get(Key, Value) :- atom(Key), !, '$fetch_global_var'(Key, Value).
|
bb_get(Key, Value) :- atom(Key), !, '$fetch_global_var'(Key, Value).
|
||||||
bb_get(Key, _) :- throw(error(type_error(atom, Key), bb_get/2)).
|
bb_get(Key, _) :- throw(error(type_error(atom, Key), bb_get/2)).
|
||||||
|
|
||||||
|
halt :- '$halt'.
|
||||||
|
|||||||
@@ -628,6 +628,8 @@ impl MachineState {
|
|||||||
|
|
||||||
self.fail = true;
|
self.fail = true;
|
||||||
},
|
},
|
||||||
|
&SystemClauseType::Halt =>
|
||||||
|
std::process::exit(0),
|
||||||
&SystemClauseType::InstallSCCCleaner => {
|
&SystemClauseType::InstallSCCCleaner => {
|
||||||
let addr = self[temp_v!(1)].clone();
|
let addr = self[temp_v!(1)].clone();
|
||||||
let b = self.b;
|
let b = self.b;
|
||||||
|
|||||||
Reference in New Issue
Block a user