2017-03-26 10 views
1

"defun"や "lambda"など、たくさん使われているコマンドで共通のlisp(正確にはclisp)でエイリアスを設定したいのですか?common lisp function/macro aliases

これは実際にこのquestionの種類の複製であるが、私はコメントすることはできませんし、溶液がマクロによって全体のポイントは、書き換えたソースを提供することで、両方のSBCLに関数定義やラムダのために働くと

答えて

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

をCLISPはありませんサービス...したがって、私はあなたにこれを提供したいとあなたはそれの外にそれを行うことができます。

(defmacro df1 (name &body body) 
    `(defun ,name (_) ,@body)) 

(df1 test (+ _ _)) 
(test 5) ; ==> 10 
..

(defmacro df (name (&rest arguments) &body body) 
    `(defun ,name ,arguments ,@body)) 

(df test (x) (+ x x)) 
(test 5) ; ==> 10 

を私達はちょうど名前を短くしているが、別のものを作ることができます3210

のように...

+1

'の使用:'だけでは、[標準に従って未定義]される(http://www.lispworks.com/documentation/HyperSpec/ Body/02_ce.htm)。それはABCL、CLisp、ECLのように名前を '' ''とするシンボルとして受け入れるようです。 ACL、CCL、LWおよびSBCLはその構文を受け入れません。 – acelent

+0

@acelent ':'はCLで特別な意味があります。私は他の何かを選んだ。 – Sylwester

+0

これは私が探していたよりもはるかに複雑です。私は一般的に用語とマクロを理解しています。これがどのように(方言の)スキームに変換されるだろうか? – DiiP

関連する問題