gpt4 book ai didi

clojure - 有没有办法在 Clojure 中进行顺序绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 17:56:54 24 4
gpt4 key购买 nike

我想使用 binding宏,但希望它像 let 中的顺序.

我想我可以这样写...

(绑定(bind) [a 1]
(绑定(bind) [b (inc a)]
(println b)))

...但必须有更好的方法。有什么想法吗?

最佳答案

(defmacro binding* [bindings & body]
(reduce (fn [acc [x y]]
`(binding [~x ~y] ~acc))
`(do ~@body)
(reverse (partition 2 bindings))))

user> (declare ^:dynamic a ^:dynamic b)
#'user/b
user> (binding* [a 1 b (inc a)] [a b])
[1 2]

user> (macroexpand-1 '(binding* [a 1 b (inc a)] [a b]))
(clojure.core/binding [a 1]
(clojure.core/binding [b (inc a)]
(do [a b])))

关于clojure - 有没有办法在 Clojure 中进行顺序绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711678/

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