Clojure 克罗朱尔。向量和列表。偷看
我是克洛朱尔·努布。玩列表和向量Clojure 克罗朱尔。向量和列表。偷看,clojure,Clojure,我是克洛朱尔·努布。玩列表和向量 > (peek [1 2 3 4]) 4 > (peek '(1 2 3 4)) 1 照承诺的那样工作。就像这样 > (cons 1 [2 3 4]) (1 2 3 4) > (cons 1 '(2 3 4)) (1 2 3 4) 我随机尝试使用peek查看cons的结果: 发生了什么事?我发现cons并不像它声称的那样简单地返回序列。我猜它会返回一个惰性序列,因为: > (type (cons 1 [2 3 4])) cloj
> (peek [1 2 3 4])
4
> (peek '(1 2 3 4))
1
照承诺的那样工作。就像这样
> (cons 1 [2 3 4])
(1 2 3 4)
> (cons 1 '(2 3 4))
(1 2 3 4)
我随机尝试使用peek查看cons的结果:
发生了什么事?我发现cons并不像它声称的那样简单地返回序列。我猜它会返回一个惰性序列,因为:
> (type (cons 1 [2 3 4]))
clojure.lang.Cons
我找到了实现它的方法
> (peek (into [] (cons 1 '(2 3 4))))
4
关于:
我发现
cons
并不能简单地返回序列
就像它声称的那样
是:cons
始终返回一个序列:
返回一个cons
clojure.lang.cons
- 它扩展了ASeq
- 它实现了ISeq
Cons
决不是一个惰性序列。它可能被包装成一个惰性序列。它的尾巴可能是一个懒惰的序列。但它本身并不是一个懒惰的序列
关于你的问题:
peek
不适用于cons
,因为peek
需要IPersistentStack
:一个cons
无法实现的接口。就我所知,它很可能 是的,但我认为更重要的是,peek
和cons
与不同的抽象相关,所以不应该这样混合它们peek
用于将持久集合视为“堆栈”,而cons
用于构造seq。请参见first
和last
。另请参见conj
,了解如何将项目添加到集合(包括堆栈)。
> (peek (into [] (cons 1 '(2 3 4))))
4