与利弊()
回答
Cons
构建了一个 “cons单元”。这首先与列表无关。 cons单元是一对两个值。一个cons cell以书面形式用“点对”表示,例如其中包含'A
和'B
这两个值。
cons小区中的两个地方被称为“car”和“cdr”。你可以想像这样的缺点小区平分块:
car cdr
+-----+-----+
| A | B |
+-----+-----+
在Lisp中,一个值也可以是别的东西的参考,例如,另一个缺点细胞:
+-----+-----+ +-----+-----+
| A | --------> | B | C |
+-----+-----+ +-----+-----+
这将是以“虚线对”形式表示为(A . (B . C))
。您可以继续如下:
+-----+-----+ +-----+-----+ +-----+-----+
| A | --------> | B | --------> | C | D |
+-----+-----+ +-----+-----+ +-----+-----+
这是(A . (B . (C . D)))
。正如你所看到的,在这样一个结构中,值总是在一个cons cell的car
中,cdr
指向结构的其余部分。最后一个值是例外情况,最后一个值是cdr
。不过,我们不需要这个例外:Lisp中有一个特殊值NIL
,它表示“无”。通过将NIL
进入最后cdr
,你有一个方便的标记值,并所有的值在car
S:
+-----+-----+ +-----+-----+ +-----+-----+ +-----+-----+
| A | --------> | B | --------> | C | --------> | D | NIL |
+-----+-----+ +-----+-----+ +-----+-----+ +-----+-----+
这是一个列表在Lisp的构建。由于(A . (B . (C . (D . NIL))))
有点笨拙,它也可以简单地表示为(A B C D)
。 NIL
也被称为空列表()
;对于同一件事,这些是可交换的符号。
现在你可以看到为什么(cons x list)
返回另一个列表。 Cons
简单地构建在car
与x
另一个缺点细胞,并在cdr
到list
参考:
+-----+-----+
| X | --------> list
+-----+-----+
如果list
是(A B)
,它的作品了如:
+-----+-----+ +-----+-----+ +-----+-----+
| X | --------> | A | --------> | B | NIL |
+-----+-----+ +-----+-----+ +-----+-----+
所以,(cons x '(a b))
评估为(x a b)
。
列表只是cons单元格的一个非常常见的用法。实际上,您也可以从cons单元或循环列表或任何有向图构建任意树。
'a
是lisp原子,而(A . A)
是称为cons cell或“虚线对”的退化列表。既然你没有在(cons x L)
中传递参数L
的列表,你找回了一个单元格。
(CONS×L)个
给定的x和L,CONS返回与X作为细胞和L作为该小区的CDR的CAR新cons单元。
列表是cons单元格的链接链。
CL-USER 141 > (sdraw '(a b c))
[*|*]--->[*|*]--->[*|*]---> NIL
| | |
v v v
A B C
CL-USER 142 > (sdraw (cons 'foo '(a b c)))
[*|*]--->[*|*]--->[*|*]--->[*|*]---> NIL
| | | |
v v v v
FOO A B C
如果缺点得到两个符号作为参数,它看起来像这样:
CL-USER 143 > (sdraw (cons 'foo 'bar))
[*|*]---> BAR
|
v
FOO
- 1. MySQL触发利弊
- 2. 的.Net/C# - 使用GAC利与弊
- 3. Lisp的差异(利弊,A(利弊'B 'C))和(缺点' A“(BC))
- 4. Flink利用gradle代替maven的利弊
- 5. 利弊的RubyMine和TextMate的
- 6. tkinter和wxWidgets的利弊?
- 7. 光子VMware的利弊
- 8. 什么是WCF(以及利弊)?
- 9. DSL vs方法调用:利弊
- 10. 利弊/来自网络位置
- 11. GLib v APR的每个利弊
- 12. 的malloc的利弊宏包装
- 13. 在虚拟机下编程 - 利弊
- 14. 直接登录链接利弊
- 15. 利弊多站点的Drupal设置
- 16. 利弊,列表和mpair球拍
- 17. 静态SQL方法的利弊
- 18. 整合的Symfony和Joomla,利弊
- 19. 利弊在ASP.NET MVC应用程序
- 20. 理解模式与利弊运营商匹配
- 21. 建立查询与积极的记录的利弊
- 22. 优点和使用游标(在SQL Server)的利弊
- 23. 利弊两个元素输出错误的结果
- 24. 通过电子邮件帐户验证 - 利弊
- 25. RavenDB中每个关键生成策略的利弊
- 26. 阅读UIImage的数据,同时滚动,利弊
- 27. 使用内核#fork为后台进程,优点?利弊?
- 28. jquery vs php对包含文件的利弊
- 29. 在数据库中存储图像:利弊
- 30. Clojure。向量和列表。利弊和偷看
CONS总是返回一个单元格。 – 2010-08-14 09:27:10