Clojure:如何在减少函数时传递参数

时间:2014-10-20 00:56:59

标签: clojure

http://www.braveclojure.com/functional-programming/开始,以下代码将修剪空格并替换" lol"用" LOL"。

(require '[clojure.string :as s])
(defn clean
  [text]
  (s/replace (s/trim text) #"lol" "LOL"))

(clean "My boa constrictor is so sassy lol!  ")
; => "My boa constrictor is so sassy LOL!" 

现在,根据网站,下面的代码减少了功能,相当于我们上面的内容。

(defn clean
      [text]
      (reduce (fn [string string-fn] (string-fn string))
              [s/trim #(s/replace % #"lol" "LOL")]))

问题:我不明白text参数如何传递到reduce函数中的匿名函数。如何编写一个类似的代码,将参数text显式传递给reduce函数中的匿名函数?

1 个答案:

答案 0 :(得分:0)

reduce函数采用可选参数,即减少的初始值。如果未提供,则使用最后一个arg的第一项(在这种情况下当然不会起作用,但是当您有一系列与初始值具有相同有效类型的输入时,它会起作用)。

user> (defn clean
        [text]
        (reduce (fn [string string-fn] (string-fn string))
                text
                [clojure.string/trim #(clojure.string/replace % #"lol" "LOL")]))
#'user/clean
user> (clean "My boa constrictor is so sassy lol!  ")
"My boa constrictor is so sassy LOL!"