2011-05-04 57 views

回答

29

您需要使用申請功能:

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

謝謝。這有助於。 – mark 2011-05-04 15:48:08

+0

Clojure函數是否具有最大值(顯着低於例如最大向量長度)?例如。如果字符串在這裏真的很長,那麼'apply'會試圖用很多參數(字符串中的字符)調用'str',以致調用失敗。 – Lassi 2017-05-05 18:22:46

6

其實也沒什麼可以填空,使表達式(= 「foo」 的_(STR(SEQ 「富」) ))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. 

應用需要一個功能(在這種情況下,STR),並與存在於SEQ

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

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

的ARGS呼籲海峽噢,順便說一句:

user> (= 1 1 1) 
true 

user> (= 1 2 1) 
false 
+5

其實'(comp(partial apply str)read-string)'會填寫第一個空格:-) – mikera 2012-05-26 06:43:50

+0

好的@mikera – Jaskirat 2012-07-17 19:04:31

4

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

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

也會打印"foo"。您可以使用前面提到的技術來定義您自己的join(以避免始終寫入(apply str seq))。