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

mar*_*ark 22 clojure

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

(= "foo" ___ (str (seq "foo")))
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ott 31

你需要使用apply函数:

user=> (apply str (seq "foo"))
"foo"
Run Code Online (Sandbox Code Playgroud)


Jas*_*rat 6

实际上没有任何东西可以填空,使表达式(="foo" _(str(seq"foo")))eval为true,因为(str(seq"foo"))=>"(\ f\o\o )"这不等于"foo"所以我们已经有一个不等式,第三个项目,无论什么价值,填补空白都不能使表达式评估为真

如果你想问

(= "foo"
    (____ str (seq "foo")))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

user> (str \f \o \o)
"foo"
Run Code Online (Sandbox Code Playgroud)

哦,顺便说一下:

user> (= 1 1 1)
true

user> (= 1 2 1)
false
Run Code Online (Sandbox Code Playgroud)

  • 实际``(comp(部分应用str)读取字符串)`将填补第一个空白:-) (5认同)