如何将(seq“foo”)转回字符串?

时间:2011-05-04 12:51:23

标签: clojure

我在探索clojure并感到困惑。 什么填充空白以使以下表达式eval为true?

(= "foo" ___ (str (seq "foo")))

3 个答案:

答案 0 :(得分:29)

您需要使用应用功能:

user=> (apply str (seq "foo"))
"foo"

答案 1 :(得分:6)

实际上没有任何东西可以填空,使表达式(=“foo” _ (str(seq“foo”)))eval为true,因为(str(seq“foo”)) => “(\ f \ o \ o)”这不等于“foo”因此我们已经存在不等式,第三项,无论什么值,填充空白都无法使表达式求值为真

如果你打算问

(= "foo"
    (____ str (seq "foo")))

然后答案将适用于亚历克斯的回答。

user> (doc apply)
-------------------------
clojure.core/apply
([f args* argseq])
  Applies fn f to the argument list formed by prepending args to argseq.

Apply接受一个函数(在本例中为str)并使用seq

中存在的args调用str
user> (seq "foo")
(\f \o \o)

user> (str \f \o \o)
"foo"

哦,顺便说一下:

user> (= 1 1 1)
true

user> (= 1 2 1)
false

答案 2 :(得分:4)

或者你可以使用方便的clojure.string/join

(require 'clojure.string)
(clojure.string/join (seq "foo"))

也会打印"foo"。您可以使用前面提到的技术定义自己的join(以避免一直写(apply str seq))。