From: Mark Thom Date: Thu, 21 Nov 2019 20:26:00 +0000 (-0400) Subject: add conditional bracketing to equations printed by toplevel X-Git-Tag: v0.8.118~38^2~10^2~1 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=b31b23e41ca26e9a5d85e0d9a47ddb43c4fde7d5;p=scryer-prolog.git add conditional bracketing to equations printed by toplevel --- diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index edb5f419..c632e059 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -461,7 +461,7 @@ pub(crate) trait CallPolicy: Any { let b = machine_st.b - 1; let n = machine_st.or_stack[b].num_args(); - for i in 1..n + 1 { + for i in 1 .. n + 1 { machine_st.registers[i] = machine_st.or_stack[b][i].clone(); } diff --git a/src/prolog/toplevel.pl b/src/prolog/toplevel.pl index f9eba5dd..e3c8a605 100644 --- a/src/prolog/toplevel.pl +++ b/src/prolog/toplevel.pl @@ -44,11 +44,27 @@ ; write('false.'), nl ). +'$needs_bracketing'(Value, Op) :- + catch((functor(Value, F, _), + current_op(EqPrec, EqSpec, Op), + current_op(FPrec, _, F)), + _, + false), + ( EqPrec < FPrec -> true + ; EqPrec == FPrec, + memberchk(EqSpec, [fx,xfx,yfx]) + ). + '$write_goal'(G, VarList) :- ( G = (Var = Value) -> write(Var), write(' = '), - write_term(Value, [quoted(true), variable_names(VarList)]) + ( '$needs_bracketing'(Value, (=)) -> + write('('), + write_term(Value, [quoted(true), variable_names(VarList)]), + write(')') + ; write_term(Value, [quoted(true), variable_names(VarList)]) + ) ; G == [] -> write('true') ; write_term(G, [quoted(true), variable_names(VarList)])