6
在Clojure中,方括號是定義向量的縮寫:爲什麼`VECTOR`和`[...]`有時候行爲不同的Clojure?
user=> (vector 'a 'b 'c)
[a b c]
user=> ['a 'b 'c]
[a b c]
The documentation page爲vector
講的長方式和限定矢量的短路。
然而,在defn
和doseq
似乎有差異。
user=> (doseq [x (range 1 4)] (printf "%d\n" x))
1
2
3
nil
user=> (doseq (vector 'x (range 1 4)) (printf "%d\n" x))
IllegalArgumentException doseq requires a vector for its binding in user:1 clojure.core/doseq (core.clj:2935)
這個區別是什麼造成的?方括號在讀者中是否具有特殊的地位,或者它們是否加了一些特定的形式?