Clojure 如何将(seq";foo";)转换回字符串?

Clojure 如何将(seq";foo";)转换回字符串?,clojure,Clojure,我正在探索clojure,感到困惑。 是什么填充了空白以使下面的表达式为真? (= "foo" ___ (str (seq "foo"))) 您需要使用应用功能: user=> (apply str (seq "foo")) "foo" 实际上,没有任何东西可以填空,使表达式(=“FO”)(STR(Seq)Fo“))到真,因为(STR(SEQ)FO”)=“(\F\O\O)”,它不等于“FO”,所以我们已经有一个不等式,第三个项目,无论什么值,填补空白不能使表达式评估为真< /P> 如果

我正在探索clojure,感到困惑。 是什么填充了空白以使下面的表达式为真?
(= "foo" ___ (str (seq "foo")))

您需要使用应用功能:

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

实际上,没有任何东西可以填空,使表达式(=“FO”)(STR(Seq)Fo“))到真,因为(STR(SEQ)FO”)=“(\F\O\O)”,它不等于“FO”,所以我们已经有一个不等式,第三个项目,无论什么值,填补空白不能使表达式评估为真< /P> 如果你想问

(= "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中的参数调用str

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

user> (str \f \o \o)
"foo"
哦,顺便说一句:

user> (= 1 1 1)
true

user> (= 1 2 1)
false

或者您可以使用convicent
clojure.string/join

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

也将打印“foo”。您可以使用前面提到的技术(避免一直写
(应用str-seq)
),来定义自己的
加入

实际上,
(comp(partial apply str)read string)
可以用来填充第一个空格:-)Clojure函数是否具有最大算术性(显著低于例如最大向量长度)?例如,如果此处的字符串很长,则
apply
将尝试调用
str
,参数太多(字符串中的字符),调用将失败。