Macros “通用Lisp宏”;让我们;与Clojure相配

Macros “通用Lisp宏”;让我们;与Clojure相配,macros,clojure,common-lisp,Macros,Clojure,Common Lisp,Clojure的let比普通Lisp更简洁,括号更少: ;Clojure (let [a 1 b 2] (+ a b)) ;Common Lisp (let ( (a 1) (b 2)) (+ a b)) 如何在Common Lisp中编写一个等效的宏 (letmac ( a 1 b 2) (+ a b)) 这并不难: 看看它是如何工作的: > (macroexpand-1 '(clojure-let (a b c d) (foo) (bar))) (L

Clojure的let比普通Lisp更简洁,括号更少:

 ;Clojure
(let [a 1 b 2]
     (+ a b))


;Common Lisp
(let ( (a 1) (b 2))
    (+ a b))
如何在Common Lisp中编写一个等效的宏

(letmac ( a 1 b 2)
    (+ a b))
这并不难: 看看它是如何工作的:

> (macroexpand-1 '(clojure-let (a b c d) (foo) (bar)))
(LET ((A B) (C D)) (FOO) (BAR)) ;
T
但是,这不是一个很好的主意(并且): 对于clojure用户来说,您的代码可能更具可读性,但对于lisper来说,它的可读性会更低

克隆人可能会产生错误的安全感,而口齿不清的人则会感到困惑

别自欺欺人
比编写几个简单的宏要困难得多。

如果你要模仿Clojure的
let
(我同意这是一个可疑的想法),你最好发出
let*
,而不是只发出
let
,因为Clojure的
let
是按顺序而不是一次完成绑定的。
> (macroexpand-1 '(clojure-let (a b c d) (foo) (bar)))
(LET ((A B) (C D)) (FOO) (BAR)) ;
T