Plaster
New
List
Login
common-lisp
default
anonymous
2020.11.25 19:14:47
(defun name-with-arity (name arity &optional (intern nil) (package *package*)) (let ((name/arity (format nil "~A/~D" (symbol-name name) arity))) (if intern (intern name/arity package) (find-symbol name/arity package)))) (defmacro defprologish (name (&rest arglist) &body forms) (let ((name/arity (name-with-arity name (length arglist) t))) `(progn (unless (fboundp ',name) (defun ,name (&rest args) (apply (name-with-arity ',name (length args)) args)) (define-compiler-macro ,name (&whole form &rest args) (let ((name/arity (name-with-arity ',name (length args)))) (if name/arity (cons name/arity args) form)))) (defun ,name/arity ,arglist ,@forms))))
Raw
Annotate
Repaste
Edit