gpt4 book ai didi

vector - 为什么 `vector` 和 `[...]` 在 Clojure 中有时表现不同?

转载 作者:行者123 更新时间:2023-12-04 14:11:07 26 4
gpt4 key购买 nike

在 Clojure 中,方括号是定义向量的简写:

user=> (vector 'a 'b 'c)
[a b c]
user=> ['a 'b 'c]
[a b c]

The documentation pagevector谈到定义向量的长路和短路。

然而,在 defndoseq似乎有区别。
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)

造成这种差异的原因是什么?方括号在读者中是否具有特殊地位,或者它们是否包含某种特定形式?

最佳答案

vector在宏展开后求值,而 []在宏展开之前,在读取时求值。在您的第二种情况下, doseq宏没有看到向量,它看到一个以符号 vector 开头的列表,因为在评估常规函数之前扩展宏。

关于vector - 为什么 `vector` 和 `[...]` 在 Clojure 中有时表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com