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.
This commit is contained in:
Markus Triska
2024-12-17 22:51:47 +01:00
parent 6175e334a5
commit 8dc80b815f

View File

@@ -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) },