Clojure 如何编写定义具有给定名称的另一个函数的函数

Clojure 如何编写定义具有给定名称的另一个函数的函数,clojure,Clojure,这是我的clojure代码: (defn salutation-adder-maker ([salutation call] (def call (sal

这是我的clojure代码:

(defn salutation-adder-maker                                                                                   
  ([salutation call]                                                                                     
   (def call (salutation-adder-maker salutation)))                                                             
  ([salutation]                                                                                          
   #(str % salutation))                        
)                                                                                                        
(salutation-adder-maker "-Thanks!" salutation1)                                                              
(salutation1 "Help me!")
代码底部的两行给出了一个错误,无法解析symbol
saltation1
。该函数可以很好地编译,但这是因为它将函数定义为
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”这是我想要的<代码>'(敬礼敬礼“-你好”)(敬礼“汤米”)=>“汤米你好”