From 28065b0565ec9ec50b8802e5eddf7575533182a3 Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Fri, 30 Jun 2023 18:01:17 +0200 Subject: [PATCH 1/4] constrain bracketing to operators with pertaining arity Example: ?- X = -->(a,b,c). X = -->(a,b,c). --- src/toplevel.pl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/toplevel.pl b/src/toplevel.pl index ff463833..d61e324f 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -208,8 +208,9 @@ needs_bracketing(Value, Op) :- nonvar(Value), \+ integer(Value), functor(Value, F, Arity), - current_op(FPrec, _, F), + current_op(FPrec, FSpec, F), current_op(EqPrec, EqSpec, Op), + arity_specifier(Arity, FSpec), ( Arity =:= 0 -> true ; EqPrec < FPrec -> @@ -222,6 +223,10 @@ needs_bracketing(Value, Op) :- memberchk(EqSpec, [fx,xfx,yfx]) ). +arity_specifier(0, _). +arity_specifier(1, S) :- atom_chars(S, [_,_]). +arity_specifier(2, S) :- atom_chars(S, [_,_,_]). + write_goal(G, VarList, MaxDepth) :- ( G = (Var = Value) -> ( var(Value) -> From bfe808a779252d98e23db1e5d4e0fa01a31ac625 Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Fri, 30 Jun 2023 18:01:54 +0200 Subject: [PATCH 2/4] shorten needs_bracketing/2 --- src/toplevel.pl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/toplevel.pl b/src/toplevel.pl index d61e324f..7d1e2569 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -211,16 +211,12 @@ needs_bracketing(Value, Op) :- current_op(FPrec, FSpec, F), current_op(EqPrec, EqSpec, Op), arity_specifier(Arity, FSpec), - ( Arity =:= 0 -> - true - ; EqPrec < FPrec -> - true - ; FPrec > 0, F == Value, graphic_token_char(F) -> - true - ; F \== '.', '$quoted_token'(F) -> - true - ; EqPrec == FPrec, - memberchk(EqSpec, [fx,xfx,yfx]) + ( Arity =:= 0 + ; EqPrec < FPrec + ; FPrec > 0, F == Value, graphic_token_char(F) + ; F \== '.', '$quoted_token'(F) + ; EqPrec =:= FPrec, + member(EqSpec, [fx,xfx,yfx]) ). arity_specifier(0, _). From a3f8ddd24a786e44d9c7183bb724e6d536d2bc9b Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Fri, 30 Jun 2023 18:02:43 +0200 Subject: [PATCH 3/4] remove subsumed case: F == Value means Arity =:= 0, now considered above --- src/toplevel.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/toplevel.pl b/src/toplevel.pl index 7d1e2569..8a0d44ea 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -213,7 +213,6 @@ needs_bracketing(Value, Op) :- arity_specifier(Arity, FSpec), ( Arity =:= 0 ; EqPrec < FPrec - ; FPrec > 0, F == Value, graphic_token_char(F) ; F \== '.', '$quoted_token'(F) ; EqPrec =:= FPrec, member(EqSpec, [fx,xfx,yfx]) From 42282c6e6ec0cff6fc110b0a6be23addc4b11088 Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Fri, 30 Jun 2023 18:03:21 +0200 Subject: [PATCH 4/4] remove unneeded case: only operator definitions should count, not quoting --- src/toplevel.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/toplevel.pl b/src/toplevel.pl index 8a0d44ea..2cfe04f5 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -213,7 +213,6 @@ needs_bracketing(Value, Op) :- arity_specifier(Arity, FSpec), ( Arity =:= 0 ; EqPrec < FPrec - ; F \== '.', '$quoted_token'(F) ; EqPrec =:= FPrec, member(EqSpec, [fx,xfx,yfx]) ).