For mathematical functions such as abs, sin, "+", etc., we recently
discussed this, and if I'm not mistaken, we all agree that the noun form and
the verb form should be identical: there is no useful functionality attached
to the difference. So we should have 'abs = nounify('abs) = verbify('abs) =
?mabs.
Things get messier when you start looking at things like op("abs"(x)). In
the current system, we have:
?print([str:"abs",sym:abs,op:op('(abs(x))),opq:op('abs(x)),
nounify(str),nounify(sym),nounify(op),nounify(opq),
verbify(str),verbify(sym),verbify(op),verbify(opq)]) =>
((MLIST SIMP) &ABS MABS MABS %MABS |%abs| %MABS
%MABS %MABS |$abs| MABS MABS MABS)
In tabular form:
String Symbol Op QuoteOp
&ABS MABS MABS %MABS
Nounify |%abs| %MABS %MABS %MABS
Verbify |$abs| MABS MABS MABS
Compare:
String Symbol Op QuoteOp
&SIN %SIN %SIN %SIN
Nounify |%sin| %SIN %SIN %SIN
Verbify |$sin| $SIN $SIN $SIN
String Symbol Op QuoteOp
&+ --- &+ %MPLUS
Nounify %MPLUS --- %MPLUS %MPLUS
Verbify MPLUS --- MPLUS MPLUS
String Symbol Op QuoteOp
&DIFF $DIFF $DIFF %DERIV
Nounify |%diff| %DERIV %DERIV %DERIV
Verbify |$diff| $DIFF $DIFF $DIFF
(%DERIVATIVE is used for %DIFF -- don't ask)
Abstracting and merging the tables (x represents lower-case):
String Symbol Op QuoteOp
AbsSin + Dif AbsSin + Dif AbsSin + Dif AbsSin + Dif
& & & & M % - $ M % & $ %M % %M %
Nounify %x %x %M %x %M % - % %M % %M % %M % %M %
Verbify $x $x M $x M $ - $ M $ M $ M $ M $
In the current system (5.11 on GCL), nounify('abs)=?%MABS and
verbify('abs)=?MABS. As far as I know, Maxima never uses ?%ABS, and ?$ABS is
only generated by op("abs"(x)), which is not related to the abs function at
all: only for operators like "+" which cannot be written without the quotes
does Maxima convert strings in a special way.
Enough for now....
-s