(appl-6ren">
gpt4 book ai didi

clojure - 在 Clojure 函数中移动参数

转载 作者:行者123 更新时间:2023-12-04 22:49:36 27 4
gpt4 key购买 nike

我正在处理 4clojure问题 29:"Get the Caps"

(= (__ "HeLlO, WoRlD!") "HLOWRD")

我在 REPL 中写了一个解决方案:
user=> (apply str (filter (fn [foo] (some #(= % foo) 
(map char (range 65 91)))) "AbC"))
"AC"

但是正如您所看到的,我的参数“AbC”嵌套在两个括号中。我如何将参数移到外面以便我可以在 4clojure 测试中使用它?我是否以错误的方式解决了这个问题?

最佳答案

您不需要将 a 参数移到外部,您可以使用与创建过滤函数相同的技术,即使用 fn :

(fn [string] 
(apply str
(filter
(fn [foo] (some #(= % foo) (map char (range 65 91))))
string)))

例如,以下两个语句是相同的:
(+ 1 2 3)
((fn [n] (+ 1 2 n)) 3)

但是,要实际回答您的问题,您可以使用 comp (“撰写”)和 partial 移动参数以允许 eta conversion (这是您尝试执行的操作的最后一部分的技术名称):
(comp (partial apply str)
(partial filter (fn [foo] (some #(= % foo)
(map char (range 65 91))))))

这个表达式现在是一个函数,它接受一个字符串,过滤大写字母,然后将它转换回一个字符串(注意 comp 从右到左应用函数)。

(注意,最后一个表达可能不是非常惯用的 Clojure;第一种方法,或者其他人的建议之一,更好。)

关于clojure - 在 Clojure 函数中移动参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362740/

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