Here is a toy function that illustrates a problem I have
(with floor, ceiling, max, min, round, truncate, ...)
(defprop %blip simp-blip operators)
(defun simp-blip (e yy z)
(declare (ignore yy))
(oneargcheck e)
(setq e (simplifya (specrepcheck (second e)) z))
(if (zerop1 e) 1 `((%blip simp) ,e)))
Let's test it. Bad:
(%i2) blip(0);
(%o2) blip(0)
OK:
(%i3) 'blip(0);
(%o3) 1
What's the story? The function mread does blip(x) --> (($blip) $x).
This is unlike other functions, say sin(x) ---> ((%sin) $x).
If I'm more or less correct about all this, how do I get Maxima
to read blip(x) as ((%blip) $x) instead of (($blip $x) ? Currently
with the function ceiling (and related) I do:
(defprop $ceiling simp-ceiling operators)
I think this isn't correct because:
(%i1) tellsimp(ceiling(x),137);
(%o1) [ceilingrule1,simp-ceiling]
OK:
(%i2) ceiling(x);
(%o2) 137
Bad:
(%i3) 'ceiling(x);
(%o3) ceiling(x)
Compare with
(%i4) tellsimp(sin(x),137);
(%o4) [sinrule1,simp-%sin]
(%i5) 'sin(x);
(%o5) 137
(%i6) sin(x);
(%o6) 137
Notice:
(%i4) :lisp(trace mread);
(%i4) blip(x);
1> (MREAD # (NIL))
<1 (MREAD ((DISPLAYINPUT) NIL (($BLIP) $X)))
(%o4) blip(x)
(%i5) sin(x);
1> (MREAD # (NIL))
<1 (MREAD ((DISPLAYINPUT) NIL ((%SIN) $X)))
(%o5) sin(x)
BW