gpt4 book ai didi

Clojure 中的过滤器类型字符串

转载 作者:行者123 更新时间:2023-12-02 23:53:15 24 4
gpt4 key购买 nike

目前我正在尝试学习 Clojure,我想编写一个具有可变数量参数的函数。该函数应该过滤每个输入以检查它是否是字符串。如果是,则应返回字符串类型的每个输入..

Clojure 对我来说很难,而且思维方式不同,但我的方向正确吗..我似乎无法解决它:

(defn returnString [& y]
(if (next y)
(filter (fn [x] (= (type x) "java.lang.String"))y)
(recur (next x))))

谢谢!

最佳答案

有一个名为 string? 的函数,如果参数是字符串,则返回 true,否则返回 false。

=> (string? "hi")
true
=> (string? 100)
false
=> (string? ["a" "b" "c"])
false

考虑到这一点,您的函数将如下所示:

(defn return-strings [& vals]
(filter string? vals))

过滤器函数将返回一个值序列(本质上是一个集合),因此在这种情况下,无需担心自定义函数中的递归(即使用recur)。

<小时/>

用于确定字符串的匿名函数非常接近正确。如果您通过在 REPL 中输入 (source string?) 来查看 string? 的源代码,您将看到:

(fn [x] (instance? String x))

不过,您所采取的方法也同样有效。您只需要指定 String 类而不是您给出的字符串值。 (请注意,您可以省略 java.lang,因为该包会像 Java 中一样自动包含在内。)

(fn [x] (= (type x) String))

关于Clojure 中的过滤器类型字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568204/

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