Skip to content

Commit

Permalink
Merge pull request acl-translation#24 from mofaph/ch3-typo
Browse files Browse the repository at this point in the history
3.15~summary 的勘误
  • Loading branch information
JuanitoFatas committed Dec 30, 2012
2 parents c6435c5 + 470a2f3 commit 4ef09ff
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions zhCN/ch3-cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@ Common Lisp 有一个内置的排序函数叫做 ``sort`` 。它接受一个序
> (cdr (assoc 'a min))
(B C)

图 3.12 程序的工作方式为使用广度优先的方式搜索网络。要使用广度优先搜索,你需要维护一个含有未探索节点的队列。每一次你到达一个节点,检查这个节点是否是你要的。如果不是,你把这个节点的子节点加入队列的尾端,并从队列起始选一个节点,从这继续搜索。藉由总是把较深的节点放在队列尾端,我们确保网络一次被搜索一层。
图 3.12 程序使用广度优先的方式搜索网络。要使用广度优先搜索,你需要维护一个含有未探索节点的队列。每一次你到达一个节点,检查这个节点是否是你要的。如果不是,你把这个节点的子节点加入队列的尾端,并从队列起始选一个节点,从这继续搜索。藉由总是把较深的节点放在队列尾端,我们确保网络一次被搜索一层。

图 3.12 中的代码较不复杂地表示这个概念。我们不仅想要找到节点,还想保有我们怎么到那的纪录。所以与其维护一个具有节点的队列 (queue),我们维护一个已知路径的队列,每个已知路径都是一列节点。当我们从队列取出一个元素继续搜索时,它是一个含有队列前端节点的列表,而不只是一个节点而已。

Expand Down Expand Up @@ -924,9 +924,9 @@ Common Lisp 有一个内置的排序函数叫做 ``sort`` 。它接受一个序

但是像任何的科技进步,如果你不小心的话,自动內存管理也有可能对你不利。使用及回收堆叠所带来的代价有时可以看做 ``cons`` 的代价。这是有理的,除非一个程序从来不丢弃任何东西,不然所有的 *Cons* 对象终究要变成垃圾。 Consing 的问题是,配置空间与清除內存,与程序的常规运作比起来花费昂贵。近期的研究提出了大幅改善內存回收的演算法,但是 consing 总是需要代价的,在某些现有的 Lisp 系统中,代价是昂贵的。

除非你很小心,不然很容易写出过度显式创建 cons 对象的程序。举例来说, ``remove`` 需要复制所有的 ``cons`` 核,直到最后一个元素从列表中移除。你可以藉由使用破坏性的函数避免某些 consing,它试​​着去重用列表的结构作为参数传给它们。破坏性函数会在 12.4 节讨论。
除非你很小心,不然很容易写出过度显式创建 cons 对象的程序。举例来说, ``remove`` 需要复制所有的 ``cons`` 核,直到最后一个元素从列表中移除。你可以藉由使用破坏性的函数避免某些 consing,它试着去重用列表的结构作为参数传给它们。破坏性函数会在 12.4 节讨论。

当写出 ``cons`` 很多的程序是如此简单时,我们还是可以写出不使用 ``cons`` 的程序。典型的方法会是写出一个纯函数风格,使用很多列表的第一版程序。当程序进化时,你可以在代码的关键部份使用破坏性函数以及/或别种资料结构。但这很难给出通用的建议,因为有些 Lisp 实现,內存管理处理得相当好,以致于使用 ``cons`` 有时比不使用 ``cons`` 还快。这整个议题在 13.4 做更进一步的细部讨论。
当写出 ``cons`` 很多的程序是如此简单时,我们还是可以写出不使用 ``cons`` 的程序。典型的方法是写出一个纯函数风格,使用很多列表的第一版程序。当程序进化时,你可以在代码的关键部分使用破坏性函数以及/或别种数据结构。但这很难给出通用的建议,因为有些 Lisp 实现,內存管理处理得相当好,以致于使用 ``cons`` 有时比不使用 ``cons`` 还快。这整个议题在 13.4 做更进一步的细部讨论。

无论如何 consing 在原型跟实验时是好的。而且如果你利用了列表给你带来的灵活性,你有较高的可能写出后期可存活下来的程序。

Expand All @@ -939,10 +939,10 @@ Chapter 3 总结 (Summary)
4. 你可以使用 ``copy-list`` 复制列表,并使用 ``append`` 来连接它们的元素。
5. 游程编码是一个餐厅中使用的简单压缩演算法。
6. Common Lisp 有由 ``car`` 与 ``cdr`` 定义的多种存取函数。
7. 映成函数应用函数至逐项的元素,或逐项的列表尾端。
7. 映射函数将函数应用至逐项的元素,或逐项的列表尾端。
8. 嵌套列表的操作有时被考虑为树的操作。
9. 要判断一个递归函数是否​​正确,你只需要考虑是否包含了所有情况。
10. 列表可以用集合表示。数个内置函数把列表当作集合。
9. 要判断一个递归函数是否正确,你只需要考虑是否包含了所有情况。
10. 列表可以用来表示集合。数个内置函数把列表当作集合。
11. 关键字参数是选择性的,并不是由位置所识别,是用符号前面的特殊标签来识别。
12. 列表是序列的子类型。 Common Lisp 有大量的序列函数。
13. 一个不是正规列表的 *Cons* 称之为点状列表。
Expand Down

0 comments on commit 4ef09ff

Please sign in to comment.