(vec)vs [] vector literal

问题描述 投票:0回答:1

我在这里有两个功能,但我会返回相同的东西,但他们没有。我不能为我的生活找出原因。有任何想法吗?

user=> (defn foo [x] (when (> x 0) (conj (vec (foo (dec x))) x)))
#'user/foo
user=> (defn bar [x] (when (> x 0) (conj [(bar (dec x))] x)))
#'user/bar
user=> (foo 5)
[1 2 3 4 5]
user=> (bar 5)
[[[[[nil 1] 2] 3] 4] 5]
recursion vector clojure literals
1个回答
5
投票

[xs]创建一个单元素向量,包含单个项目xs。相比之下,(vec xs)不会创建包含项目xs的单元素向量。相反,它会创建一个n元素向量,分别包含xs中的每个项目。前者的功能是vector(vector x y z)在概念上与[x y z]相同。与(list x)(seq x)相比:前者创建包含其输入的单元素序列,而后者将其输入转换为序列。

当然,如果你要conjvector的结果你也可以直接构建2元素向量:而不是(conj (vector x) y),写[x y]

© www.soinside.com 2019 - 2024. All rights reserved.