如何在 Clojure 中链接函数调用?
How to chain function calls in Clojure?
假设我有一个字符串,我想按如下方式转换它:
- 删除所有空格。
- 删除所有点。
- 将字符串设为小写。
一种方法是这样的:
(defn my-function
[s]
(let
[
clean-string1 (clojure.string/replace s " " "")
clean-string2 (clojure.string/replace clean-string1 "." "")
clean-string3 (clojure.string/lower-case clean-string2)
]
;; ...
)
)
如何“链接”函数 clojure.string/replace
和 clojure.string/lower-case
以便
(clojure.string/replace s " " "")
的输出被馈送到 的输入
(clojure.string/replace clean-string1 "." "")
其输出被馈送到 的输入
(clojure.string/lower-case clean-string2)
这样我就不需要中间变量 clean-string1
和 clean-string2
?
您只需按照使用任何语言的方式进行操作即可。您要求函数组合,在数学或非 lisp 语言中看起来像 f(g(x))
。 lisp当然是(f (g x))
,但是原理是一样的
(require '[clojure.string :as s])
(s/lower-case (s/replace (s/replace s " " "") "." ""))
是最直接的答案。但是,将函数名从它们的额外参数中移除的这种嵌套级别是相当不愉快的,因此大多数人会改写
(-> s
(s/replace " " "")
(s/replace "." "")
(s/lower-case))
这是一回事,只是为了清楚起见,使用 ->
稍微打乱了表格。
假设我有一个字符串,我想按如下方式转换它:
- 删除所有空格。
- 删除所有点。
- 将字符串设为小写。
一种方法是这样的:
(defn my-function
[s]
(let
[
clean-string1 (clojure.string/replace s " " "")
clean-string2 (clojure.string/replace clean-string1 "." "")
clean-string3 (clojure.string/lower-case clean-string2)
]
;; ...
)
)
如何“链接”函数 clojure.string/replace
和 clojure.string/lower-case
以便
(clojure.string/replace s " " "")
的输出被馈送到 的输入
(clojure.string/replace clean-string1 "." "")
其输出被馈送到 的输入
(clojure.string/lower-case clean-string2)
这样我就不需要中间变量 clean-string1
和 clean-string2
?
您只需按照使用任何语言的方式进行操作即可。您要求函数组合,在数学或非 lisp 语言中看起来像 f(g(x))
。 lisp当然是(f (g x))
,但是原理是一样的
(require '[clojure.string :as s])
(s/lower-case (s/replace (s/replace s " " "") "." ""))
是最直接的答案。但是,将函数名从它们的额外参数中移除的这种嵌套级别是相当不愉快的,因此大多数人会改写
(-> s
(s/replace " " "")
(s/replace "." "")
(s/lower-case))
这是一回事,只是为了清楚起见,使用 ->
稍微打乱了表格。