tokenizer / parser declarations (?)



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