2017-03-26 159 views
1

我想为常用的lisp(clisp准确地)设置别名,用于大量使用的命令,比如“defun”和“lambda”等,是否可以这样做?通用lisp函数/宏别名

这实际上是这个question样的副本,但我不能评论和解决方案并不在这两个SBCL为defun函数或lambda工作,CLISP

回答

5

宏:

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) 
3

整点由宏是提供源重写服务。因此我想给你这一点,你就可以说出来的:

(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 

等等...

+1

使用的':'单独被(http://www.lispworks.com/documentation/HyperSpec/ [根据标准未定义]车身/ 02_ce.htm)。看来ABCL,CLisp和ECL接受它作为''“''的名称的符号; ACL,CCL,LW和SBCL不接受该语法。 – acelent

+0

@acelent有意义的是':'在CL中是特殊的。我选择了别的东西。 – Sylwester

+0

这比我想要的要复杂一些,因为我仍然需要了解一般的术语和宏。任何想法将如何转化为(方言)方案? – DiiP