2017-03-26 64 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