gpt4 book ai didi

clojure - 常见的 lisp cons 从两个符号创建一个列表,clojure cons 需要一个 seq 到 cons 上?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:14 29 4
gpt4 key购买 nike

(免责声明 - 我知道 Seqs 在 Clojure 中的重要性)

在普通的 lisp 中,cons 函数可用于将两个符号组合成一个列表:

(def s 'x)
(def l 'y)
(cons s l)

在 clojure 中——你只能对一个序列使用 cons——cons 还没有扩展到使用两个符号。所以你必须写:

(def s 'x)
(def l 'y)
(cons s '(l))

Clojure 中是否有更高级别的模式可以解释 Common LISP 和 Clojure 之间的这种差异?

最佳答案

在 Clojure 中,与传统的 Lisp 不同,列表不是主要的数据结构。数据结构可以实现 ISeq接口(interface)——这是它给出的数据结构的另一种 View ——允许相同的函数访问每个中的元素。 (列表已经实现了这一点。seq? 检查是否有东西实现了 ISeq(seq? '(1 2)), (seq? [1 2])) Clojure 只是表现不同(有充分的理由),因为当使用 cons 时,一个序列(它实际上是 clojure.lang.Cons 类型)由 a 构造并返回 (seq b)。(a 是 arg 1 和 b arg 2)显然,符号不会也不能实现 ISeq

Clojure.org/sequences

Sequences screencast/talk by Rich Hickey但是,请注意 rest已经改变,它以前的行为现在在 next 中,那lazy-cons已被 lazy-seq 取代和 cons .

clojure.lang.RT

关于clojure - 常见的 lisp cons 从两个符号创建一个列表,clojure cons 需要一个 seq 到 cons 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222789/

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