haw*_*eye 14 lisp clojure common-lisp sequence cons
(免责声明 - 我知道Seqs在Clojure中的重要性)
在常见的lisp中,cons函数可用于将两个符号组合成一个列表:
(def s 'x)
(def l 'y)
(cons s l)
Run Code Online (Sandbox Code Playgroud)
在clojure中 - 你只能使用一个序列 - 缺点还没有扩展到使用两个符号.所以你必须写:
(def s 'x)
(def l 'y)
(cons s '(l))
Run Code Online (Sandbox Code Playgroud)
在Clojure中有更高级别的模式可以解释Common LISP和Clojure之间的这种差异吗?
在Clojure中,与传统的Lisp不同,列表不是主要的数据结构.数据结构可以实现ISeq接口 - 这是它给出的数据结构的另一个视图 - 允许相同的函数访问每个接口中的元素.(名单已经实现了这一点.seq?事情是否实现检查ISEQ.(seq? '(1 2)), (seq? [1 2]))Clojure的根本作用不同(有很好的理由),因为当cons使用时,一个序列(它实际上型clojure.lang.Cons)的构造a和(seq b)返回.(a是ARG 1和bARG 2)显然,符号不能也不能实现ISeq.
Rich Hickey的序列截屏/谈话但是,注意rest已经改变了,之前的行为已经出现了next,并且lazy-cons已被替换为lazy-seq和cons.
在Common Lisp中,CONS创建了一个所谓的CONS单元,它类似于带有两个槽的记录:'car'和'cdr'.
你可以将ANYTHING放入cons小区的两个插槽中.
Cons单元格用于构建列表.但是可以用cons单元创建各种数据结构:树,图,各种类型的专用列表,......
Lisp的实现经过高度优化,可提供非常有效的cons单元.
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |