acl-translation/acl-chinese

ch2 不通順

JuanitoFatas opened this issue · 1 comments

2.1

  1. 你在顶层输入 Lisp 表达式 (expression),然后系统显示它们的值。
  2. Lisp 通常显示一个符号告诉你
  3. 最简单的 Lisp 表达式之一,是一个整数。
  4. 算数表达式采用中序表示法; 函数调用采用某种前序表示法,参数用逗号隔开; 表达式用分号隔开; 而一段程序用大括号隔开。

=> 分號用全形

2.3

  1. 它用一系列被双引号包住的字符表示: ora et labora

=> 缺少雙引號

  1. 我们通常在别的语言找不到的两个 Lisp 数据类型是 符号 (symbol)与 列表 (lists)

=> 兩個通常在別的語言所找不到的數據類型是符号 (symbol)与 列表 (lists)。

2.4

  • 將 cons 統一為"构造"

2.5

  1. 一个函数的返回值打算被解释成 真 或 假 ,则此函数被称为判断式 ( predicate )。
  2. 用 nil ,"即"空表来表示。
  3. test 表达式被求值。若为 真 ,则 then 表达式被求值,并返回这个值。若 test 表达式为 假 ,则 else 表达式被求值,并返回这个值:

=> 若 test 表达式被求值为真,则 then 表达式被求值,并返回这个值。若 test 表达式为 假 ,则 else 表达式被求值,并返回这个值:

  1. 虽然 t 是 真 的预设表示法,任何不是 nil 的东西,在逻辑的语意中被​​认为是 真 。

2.6

  1. 第二个参数,一个列表 (x),说明这个函数会接受一个参数 (parameter): x 。这样使用的占位符 (placeholder) 符号叫做 变量 。当变量代表了传入函数的参数,如这里的 x ,又被叫做 参数 ( parameter )。

=> 將該補上行內代碼的補上

  1. 它们本身就是以对象的方式存在。

=> 它们本身就是以对象 (object)的方式存在。

  1. 这也是为什么符号,像列表一样必须被引用。

=> 这也是为什么符号,必须像列表一样被引用。

2.7

  1. 自己调用自己的函数叫做 递归 (recursive)

=> 自己调用自己的函数是递归的 (recursive)

> (defun our-member (obj lst)
    (if (null lst)
      nil
    (if (eql (car lst) obj)
      lst
      (our-member obj (cdr lst)))))
OUR-MEMBER

=> 縮排不對!!!

  1. 判断式 eql 测试它的两个参数是否相同;

=> identical 翻成相同不太好

  1. 这个定义的所有东西我们之前都学过。

=> aside from that, everything in this definition is something we have
seen before.

  1. 较好的比喻是,把函数想成一个处理的过程。

=> process 應翻為 進程

2.9

  1. 最普遍的 Common Lisp 输出函数是 format 。它接受两个或两个以上的参数,第一个参数表示,输出要在哪里被打印,第二个参数是字串模版 (String Template),而剩下的参数,通常是要插入到字串模版对象的印刷表示法 (printed representation)。下面是一个典型的例子:

=> 這句要修

  1. format 的第一个参数 t 表示输出被送到预设的地方去。

=> format 的第一个参数 t 表示输出被送到缺省的地方去。

  1. 直到输入某些东西并 (通常要)按下回车 (hit return)。

=> 括號不對

  1. read 是一个完整的 Lisp 解析器

=> Lisp 解析器加上英文 Lisp parser

  1. ”纯粹的” Lisp

=> 雙引號不對

  1. 一个副作用是指,一个表达式被求值后,对外部世界的状态做了某些改变。

=> A side-effect is some
change to the state of the world that happens as a consequence of
evaluating an expression.

2.10

  1. 它们分别被赋予初始值 1 和2。

=> 少空格

  1. 这些变量在 let 的主体内有效。

=> These
variables are valid within the body of the let.

  1. 像这样的变量在任何地方都可以存取,除了有表达式定义了相同名字的区域变量。

=> Such a variable will then be accessible everywhere, except in
expressions that create a new local variable with the same name.

2.11

  1. 名詞修正

=> 参照 都改為引用

2.12

  1. 起初可能连想这怎么可能都很困难,更遑论去做了。怎么可以只凭返回值来建立程序?

=> At first sight it may be difficult to imagine how this
is even possible, let alone desirable.

2.13

  1. 这个 do 宏是Common Lisp
  2. 第二个传给 do 的参数包含了一个或多个表达式。

=> The second argument to do should be a list containing one or more
expressions.

  1. 因此上面的循环说,对每一个列表 lst 中的 obj , len 增加 1 。

=> So the loop above says, for each obj in lst, increment
len.

2.14

  1. 函数在 Lisp 中就是一般的对象 (object),像是符号、字串或列表。

=> In Lisp, functions are regular objects, like symbols or strings or
lists.

函數在 Lisp 中和符號、字串或列表一樣,是正常的對象

  1. 它可以接受任意数目的参数,只要最后一个是列表:

=> 它可以接受任意数目的参数,只要最后一个參數是列表:

  1. 函数在内部用列表来代表,

函数在内部用列表来表示,

  1. Among other things, this notation allows us to use functions
    without naming them.

=> 除了别的以外,这个标示法允许我们使用匿名函数。

DONE IN COMMIT bad7c21.