我正在探索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)
实际上没有任何东西可以填空,使表达式(="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)