常见的 lisp function/macro 别名
common lisp function/macro aliases
我想在common lisp(确切地说是clisp)中为经常使用的命令设置别名,例如"defun"和"lambda"等,可以这样做吗?
这实际上是这个 question 的副本,但我无法发表评论,并且该解决方案不适用于 sbcl 和 clisp 中的 defun 或 lambda
宏的全部意义在于提供源代码重写服务。因此我想给你这个,你可以用它来做:
(defmacro df (name (&rest arguments) &body body)
`(defun ,name ,arguments ,@body))
(df test (x) (+ x x))
(test 5) ; ==> 10
我们刚刚缩短了名字..让我们再做一个:
(defmacro df1 (name &body body)
`(defun ,name (_) ,@body))
(df1 test (+ _ _))
(test 5) ; ==> 10
等等...
宏:
CL-USER 5 > (setf (macro-function 'dm) (macro-function 'defmethod))
#<Function DEFMETHOD 410009A014>
CL-USER 6 > (dm m1+ ((v vector)) (map 'vector #'1+ v))
#<STANDARD-METHOD M1+ NIL (VECTOR) 4130003913>
CL-USER 7 > (m1+ #(1 2 3 4))
#(2 3 4 5)
我想在common lisp(确切地说是clisp)中为经常使用的命令设置别名,例如"defun"和"lambda"等,可以这样做吗?
这实际上是这个 question 的副本,但我无法发表评论,并且该解决方案不适用于 sbcl 和 clisp 中的 defun 或 lambda
宏的全部意义在于提供源代码重写服务。因此我想给你这个,你可以用它来做:
(defmacro df (name (&rest arguments) &body body)
`(defun ,name ,arguments ,@body))
(df test (x) (+ x x))
(test 5) ; ==> 10
我们刚刚缩短了名字..让我们再做一个:
(defmacro df1 (name &body body)
`(defun ,name (_) ,@body))
(df1 test (+ _ _))
(test 5) ; ==> 10
等等...
宏:
CL-USER 5 > (setf (macro-function 'dm) (macro-function 'defmethod))
#<Function DEFMETHOD 410009A014>
CL-USER 6 > (dm m1+ ((v vector)) (map 'vector #'1+ v))
#<STANDARD-METHOD M1+ NIL (VECTOR) 4130003913>
CL-USER 7 > (m1+ #(1 2 3 4))
#(2 3 4 5)