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 ->
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) ->