From: Markus Triska Date: Tue, 17 Dec 2024 21:51:47 +0000 (+0100) Subject: use round brackets for goals involving operators X-Git-Tag: v0.10.0~89^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=8dc80b815fa72da5dad86777447c374ef1350c20;p=scryer-prolog.git use round brackets for goals involving operators Examples: ?- portray_clause(((+) :- a=b,(-))). (+) :- a=b, (-). true. ?- portray_clause((a :- (b :- c))). a :- (b:-c). true. This addresses #2715. Currently, more round brackets than needed are emitted. Ideally, a better approach to solve the issue here and also in toplevel.pl is found in the future. --- diff --git a/src/lib/format.pl b/src/lib/format.pl index 5389c90d..2ac4744b 100644 --- a/src/lib/format.pl +++ b/src/lib/format.pl @@ -593,7 +593,15 @@ portray_clause_(Term) --> literal(Lit, VNs) --> { write_term_to_chars(Lit, [quoted(true),variable_names(VNs),double_quotes(true)], Ls) }, - seq(Ls). + ( { nonvar(Lit), + functor(Lit, F, A), + current_op(Pri, _, F), + ( A =:= 0 + ; Pri >= 1000 + ) } -> + "(", seq(Ls), ")" + ; seq(Ls) + ). literal_(Lit, VNs) --> { phrase(literal(Lit, VNs), Ls) },