5

我正在尝试编写一个函数,它接受一个字符串并返回一个过滤函数的结果(我正在解决4clojure问题)。结果也必须是一个字符串。

我写了这个:

(fn my-caps [s]
  (filter #(Character/isUpperCase %) s))

(my-caps "HeLlO, WoRlD!")

Result: (\H \L \O \W \R \D)

现在我正在尝试使用 clojure.string/join 从此列表中创建一个字符串,如下所示:

(fn my-caps [s]
  (clojure.string/join (filter #(Character/isUpperCase %) s)))

然而结果是一样的。我也尝试过使用apply str,但没有成功。

4

3 回答 3

4

您粘贴的最后一个代码段工作正常。join确实返回一个字符串。

于 2013-06-23T22:33:26.063 回答
4

您必须通过应用函数将返回的惰性序列转换filter为字符串。str此外,用于defn定义新函数 - 方法如下:

(defn my-caps [s]
  (apply str (filter #(Character/isUpperCase %) s)))

它按预期工作:

(my-caps "HeLlO, WoRlD!")
=> "HLOWRD"
于 2013-06-23T22:23:12.117 回答
3

尝试这个:

(defn my-caps [s]
  (->> (filter #(Character/isUpperCase %) s)
       (apply str)))

filter函数返回一个惰性序列。如果你想得到 a ,你应该通过应用函数string将序列转换为字符串。str

于 2013-06-23T22:14:28.093 回答