Clojure 如何编写定义具有给定名称的另一个函数的函数
这是我的clojure代码:Clojure 如何编写定义具有给定名称的另一个函数的函数,clojure,Clojure,这是我的clojure代码: (defn salutation-adder-maker ([salutation call] (def call (sal
(defn salutation-adder-maker
([salutation call]
(def call (salutation-adder-maker salutation)))
([salutation]
#(str % salutation))
)
(salutation-adder-maker "-Thanks!" salutation1)
(salutation1 "Help me!")
代码底部的两行给出了一个错误,无法解析symbolsaltation1
。该函数可以很好地编译,但这是因为它将函数定义为call
。因此,以下代码起作用:
(call "Help me!")
它吐出来了
Help me-Thanks!
而不是具有该功能的功能saltation1
。如何更改代码,使saltation1
执行与call
当前执行的操作相同的操作
我希望能够传递两个参数:
- 在结尾加上的问候语
- 用于添加该称呼的函数的名称
(salutation-adder-maker "-Have a good day!" day_salutation)
(day_salutation "I will talk to you later")=>"I will talk to you later-Have a good day!"
您的代码似乎假定
def
像函数一样工作。尽管语法不同,但它非常不同,特别是作为def的第一个参数使用的符号必须在编译时解析,而不是在运行时解析。因此,要在def
的基础上构建,您将倾向于使用宏,而不是函数。这是有问题的,因为虽然2-arg arity需要一个宏,但1-arg arity最好由函数提供
我建议将工作分为函数和宏:
(defn salutation-maker [salutation]
#(str % salutation))
(defmacro defsalutation [name salutation]
`(def ~name (salutation-maker ~salutation)))
您的代码似乎假定
def
像函数一样工作。尽管语法不同,但它非常不同,特别是作为def的第一个参数使用的符号必须在编译时解析,而不是在运行时解析。因此,要在def
的基础上构建,您将倾向于使用宏,而不是函数。这是有问题的,因为虽然2-arg arity需要一个宏,但1-arg arity最好由函数提供
我建议将工作分为函数和宏:
(defn salutation-maker [salutation]
#(str % salutation))
(defmacro defsalutation [name salutation]
`(def ~name (salutation-maker ~salutation)))
你的问题不清楚。提供一些示例调用和预期结果。你所说的“应用所说的问候”是什么意思?希望添加所需的输出可以澄清我的目标。你的问题不清楚。提供一些示例调用和预期结果。你所说的“应用所说的问候”是什么意思?希望添加所需的输出可以澄清我的目标。这是我想要的<代码>'(反敬礼敬礼“-hello”)(敬礼“tommy”)=>“tommy hello”这是我想要的<代码>'(敬礼敬礼“-你好”)(敬礼“汤米”)=>“汤米你好”