2" 和 (let [a 1 b 2 c 3] (ds a b c)) -> "a->1, b--6ren">
gpt4 book ai didi

macros - 如何在 clojure 中制作这个宏变量?

转载 作者:行者123 更新时间:2023-12-03 00:06:40 25 4
gpt4 key购买 nike

我想做一个叫做 ds 的东西,这样

(let [a 2]
(ds a))

->

 "a->2"

(let [a 1 b 2 c 3]
(ds a b c))

->

 "a->1, b->2, c->3"

到目前为止,我已经做到了:

(defmacro ds3 [a b c] 
`(clojure.string/join ", "
[(str '~a "->" ~a)
(str '~b "->" ~b)
(str '~c "->" ~c)]))

这似乎有效:

 (let [ a 1 b 2 c 3]
(ds3 a b c)) ; "1->1, 2->2, 3->3"

显然我可以定义 ds1 ds2 ds3 等...,但我想知道如何使其可变?

最佳答案

给你:

(defmacro ds [& symbols]                                                                                                                             
`(clojure.string/join ", "
~(into []
(map (fn [s] `(str ~(name s) "->" ~s)) symbols))))

关于macros - 如何在 clojure 中制作这个宏变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686807/

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