Little Schemer 中 quote 的歧义。什么时候应该在表达式后加上引号,什么时候不应该?
Ambiguity with `quote` in the Little Schemer. When should an expression be proceeded with a quote and when shouldn't it?
Friedman 和 Felleisen 的 Little Schemer 4e 首先定义 atom?
:
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
然后在第一章中有问题询问某某是否是原子。例如。 (为清楚起见,对脚注进行了改写):
Is it true that this is an atom?
atom
*
*in Scheme: (quote atom)
or 'atom
表示turkey
、1492
、u
、*abc$
也是原子
除 1492
之外的所有这些都必须以 '
开头 - 否则我们会得到 Error: execute: unbound symbol:
1492
和 '1492
都有效。从今以后,在这本书中,我如何知道什么时候应该或不应该在某件事之前加上引号 ('
)???这很混乱。我希望作者只是明确地使用引号——在表达式之前使用单引号 ('
) 真的会增加那么多视觉噪音吗???我是否应该假设所有内容都以引号 ('
) 开头?
原子。原子是不可分割的东西。像 13
或 72
这样的值是不可分割的,它是一个值。还有其他原子,像 "hello"
这样的字符串,像 x
或 y
这样的变量,像 :keyword
或 'something
.
这样的值
写Lisp时,原子之间用空格或括号分隔。然后我们可以通过将原子放在括号内来创建一个或多个 form
,例如 (* 2 (+ 1 3))
。这里的原子是:
- 运算符 + 和 *
- 值 1、2 和 3
- 表格 (+ 1 3) 和 (* 2 ...)
然后有几个问题。对于初学者,x
是指原子 'x
、称为 x
的变量,还是存储在变量 x
中的值? Lisp 假定 x
是一个变量,因此键入 x
returns x
的值或产生有关 x
未绑定的错误。在 x
前面加上单引号,如 'x
表示“请不要尝试评估此”。
表单具有一致的格式 (operator data1 data2 data3 ...)
。但是,如果您只想提供数据会怎样?你用什么运营商?答案是使用运算符 quote
,它将表单计算为数据。因为总是说 quote 很烦人,Lisp 允许你说 '(data1 data2 data3 ...)
代替。
至于'1492
,这与Scheme和Common Lisp中的1492
是一样的。这些值是可以互换的。我会使用 1492
因为引用是多余的。
Friedman 和 Felleisen 的 Little Schemer 4e 首先定义 atom?
:
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
然后在第一章中有问题询问某某是否是原子。例如。 (为清楚起见,对脚注进行了改写):
Is it true that this is an atom?
atom
**in Scheme:
(quote atom)
or'atom
表示turkey
、1492
、u
、*abc$
也是原子
除 1492
之外的所有这些都必须以 '
开头 - 否则我们会得到 Error: execute: unbound symbol:
1492
和 '1492
都有效。从今以后,在这本书中,我如何知道什么时候应该或不应该在某件事之前加上引号 ('
)???这很混乱。我希望作者只是明确地使用引号——在表达式之前使用单引号 ('
) 真的会增加那么多视觉噪音吗???我是否应该假设所有内容都以引号 ('
) 开头?
原子。原子是不可分割的东西。像 13
或 72
这样的值是不可分割的,它是一个值。还有其他原子,像 "hello"
这样的字符串,像 x
或 y
这样的变量,像 :keyword
或 'something
.
写Lisp时,原子之间用空格或括号分隔。然后我们可以通过将原子放在括号内来创建一个或多个 form
,例如 (* 2 (+ 1 3))
。这里的原子是:
- 运算符 + 和 *
- 值 1、2 和 3
- 表格 (+ 1 3) 和 (* 2 ...)
然后有几个问题。对于初学者,x
是指原子 'x
、称为 x
的变量,还是存储在变量 x
中的值? Lisp 假定 x
是一个变量,因此键入 x
returns x
的值或产生有关 x
未绑定的错误。在 x
前面加上单引号,如 'x
表示“请不要尝试评估此”。
表单具有一致的格式 (operator data1 data2 data3 ...)
。但是,如果您只想提供数据会怎样?你用什么运营商?答案是使用运算符 quote
,它将表单计算为数据。因为总是说 quote 很烦人,Lisp 允许你说 '(data1 data2 data3 ...)
代替。
至于'1492
,这与Scheme和Common Lisp中的1492
是一样的。这些值是可以互换的。我会使用 1492
因为引用是多余的。