From: Mark Thom Date: Sat, 22 Feb 2020 22:13:01 +0000 (-0700) Subject: remove setof/3, bagof/3 non-determinism (#270) X-Git-Tag: v0.8.119~72 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=af23258152abf80f95422e06e14629944adb03b0;p=scryer-prolog.git remove setof/3, bagof/3 non-determinism (#270) --- diff --git a/src/prolog/lib/builtins.pl b/src/prolog/lib/builtins.pl index 2ac2ec38..6a3f091e 100644 --- a/src/prolog/lib/builtins.pl +++ b/src/prolog/lib/builtins.pl @@ -456,7 +456,10 @@ group_by_variants([V-S|Pairs], [V-Solution|Solutions]) :- group_by_variants(Pairs0, Solutions). group_by_variants([], []). -iterate_variants([V-Solution|GroupSolutions], V, Solution). +iterate_variants([V-Solution|GroupSolutions], V, Solution) :- + ( GroupSolutions == [] -> ! + ; true + ). iterate_variants([_|GroupSolutions], Ws, Solution) :- iterate_variants(GroupSolutions, Ws, Solution). @@ -491,7 +494,10 @@ bagof(Template, Goal, Solution) :- iterate_variants(GroupedSolutions, Witnesses, Solution). iterate_variants_and_sort([V-Solution0|GroupSolutions], V, Solution) :- - sort(Solution0, Solution). + sort(Solution0, Solution), + ( GroupSolutions == [] -> ! + ; true + ). iterate_variants_and_sort([_|GroupSolutions], Ws, Solution) :- iterate_variants_and_sort(GroupSolutions, Ws, Solution). @@ -948,7 +954,7 @@ chars_or_vars([C|Cs], PI) :- ). can_be_codes_or_vars(Cs, _) :- var(Cs), !. -can_be_codes_or_vars(Cs, PI) :- +can_be_codes_or_vars(Cs, PI) :- ( string(Cs) -> current_prolog_flag(double_quotes, codes) ; codes_or_vars(Cs, PI) diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index c6db779b..fbc249cd 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -2207,7 +2207,7 @@ impl MachineState { (HeapCellValue::Addr(Addr::PStrLocation(..)), HeapCellValue::Addr(Addr::Con(Constant::String(..)))) | (HeapCellValue::Addr(Addr::Con(Constant::String(..))), - HeapCellValue::Addr(Addr::PStrLocation(..))) + HeapCellValue::Addr(Addr::PStrLocation(..))) if self.flags.double_quotes.is_chars() => { continue; } @@ -3169,7 +3169,8 @@ impl MachineState { false } - pub(super) fn setup_built_in_call(&mut self, ct: BuiltInClauseType) { + pub(super) + fn setup_built_in_call(&mut self, ct: BuiltInClauseType) { self.num_of_args = ct.arity(); self.b0 = self.b;