gpt4 book ai didi

macros - "let"的 Common Lisp 宏以匹配 Clojure

转载 作者:行者123 更新时间:2023-12-01 08:29:10 25 4
gpt4 key购买 nike

Clojure 的 let 比 Common 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))

最佳答案

这并不难:

(defmacro clojure-let (bindings &body body)
`(let ,(loop for (a b) on bindings by #'cddr collect (list a b))
,@body))

看看它是如何工作的:

> (macroexpand-1 '(clojure-let (a b c d) (foo) (bar)))
(LET ((A B) (C D)) (FOO) (BAR)) ;
T

但是,这不是一个非常好的主意(和 not a new one either!):

您的代码可能对于 clojure 用户来说更具可读性,但对于 lisper 来说较少可读。

一个clojurer 可能得到一种错误的安全感,而一个lisper 感到困惑。

不要自欺欺人

Porting Common Lisp code to Clojure比写几个简单的宏要难得多。

关于macros - "let"的 Common Lisp 宏以匹配 Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24816280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com