Clojure noob在这里。玩弄清单和矢量。
> (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)
我随机尝试对 cons 的结果使用 peek :
> (peek (cons 1 [2 3 4]))
ClassCastException clojure.lang.Cons cannot be cast to clojure.lang.IPersistentStack clojure.lang.RT.peek (RT.java:724)
发生了什么事?
答案 0 :(得分:2)
在我周围玩耍后发现,利弊并没有像他声称的那样明显地返回一个序列。我的猜测是它返回一个懒惰的序列,因为:
> (type (cons 1 [2 3 4]))
clojure.lang.Cons
我找到了实现它的方法
> (peek (into [] (cons 1 '(2 3 4))))
4
答案 1 :(得分:1)
关于your answer:
玩弄我发现
cons
没有明确地返回一个序列 喜欢它声称。
是的:cons
总是返回一个序列:
cons
会返回clojure.lang.Cons
,ASeq
,ISeq
。我的猜测是它会返回一个懒惰的序列...
Cons
永远不是一个懒惰的序列。它可以以懒惰的顺序包裹。它的尾巴可能是一个懒惰的序列。但它本身并不是一个懒惰的序列。
关于你的问题:
peek
无效cons
,因为peek
需要IPersistentStack
:Cons
未实现的界面。据我所见,它可以。