defproc

Mit dem Macro defproc lassen sich Funktionen definieren. Das Macro erwartet drei Argumente: das Symbol, das die neu erzeugte Funktion als Wert erhält, die Parameterliste der Funktion und deren Rumpf.

Abhängig davon, ob das als erste Argument übergebene Symbol bereits an eine generische Funktion gebunden ist oder nicht, wird entweder mit einer Zwischenform der Art (defmacro <name> <parameters> t <body>) eine neue Methode oder mit (setq <name> (lambda <parameters> <body>)) eine neue Funktion erzeugt.

(setq defproc
  (mlambda args
    (if
      (equal? (list-length args) 3)
      (quasi-quote
        (if
          (and
            (bound? (quote (unquote (first args))))
            (generic-function? (unquote (first args))))
          (defmethod (unquote (first args)) (unquote (second args))
            t
            (unquote (third args)))
          (setq (unquote (first args))
            (lambda (unquote (second args))
              (unquote (third args))))))
      (throw (quote error) "wrong number of arguments for defproc"))))