gpt4 book ai didi

macros - 如何创建一个宏来在 clojure 中定义两个函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:04 25 4
gpt4 key购买 nike

下面的代码并不像我预期的那样运行。

; given a function name, its args and body, create 2 versions:
; i.e., (double-it foo []) should create 2 functions: foo and foo*
(defmacro double-it
[fname args & body]
`(defn ~fname ~args ~@body)
`(defn ~(symbol (str fname "*")) ~args ~@body))

上面的代码并没有像我期望的那样创建两个函数。它只创建最后一个。

user=> (double-it deez [a b] (str b a))
#'user/deez*

我怎样才能得到一个宏来定义两个函数?

最佳答案


; given a function name, its args and body, create 2 versions:
; ie (double-it foo [] ) should create 2 functions: foo and foo*
(defmacro double-it
[fname args & body]
`(do (defn ~fname ~args ~@body)
(defn ~(symbol (str fname "*")) ~args ~@body)))

(double-it afunc [str] (println str))

(afunc* "asd")
(afunc "asd")

无需单独引用。

关于macros - 如何创建一个宏来在 clojure 中定义两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966014/

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