弗里德曼和费莱森的“小阴谋家4e”从定义atom?开始
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))然后,在第一章中,有问题问是否是原子,是否是原子。例如(为了清楚起见,对脚注作了修改):
,这是一个原子,是真的吗?
atom*
*在计划中:(quote atom)或'atom
它说turkey,1492,u和*abc$也是原子。
除了1492之外,所有这些都必须前面有一个',否则我们就得到一个Error: execute: unbound symbol:。
1492和'1492都能工作。从今以后,在这本书中,我如何知道什么时候应该或不应该引用(')?这很让人困惑。我希望作者能清楚地引用这些引语-在表达式前面加上一个单引号(')真的会增加那么多的视觉噪音吗?我是否应该假设一切都在引号(')之前?
发布于 2021-12-11 21:21:22
原子。原子是一个不可分割的东西。像13或72这样的值是不可分割的,它是一个单一的值。还有其他原子,像"hello"这样的字符串,像x或y这样的变量,像:keyword或'something这样的值。
在写Lisp时,原子用空格或括号分隔。然后,我们可以通过在圆括号中插入原子来创建一个或多个form,例如(* 2 (+ 1 3))。这里的原子是:
然后就出现了几个问题。首先,对于x,我们是指原子'x,一个名为x的变量,还是存储在变量x中的值?Lisp假设x是一个变量,所以输入x返回x的值,或者产生一个x未绑定的错误。在x前面加上一个单引号,就像'x说的,“请不要试图对此进行评估”。
表单具有一致的格式(operator data1 data2 data3 ...)。但是,如果您只想提供数据,会发生什么呢?你用什么接线员?答案是使用操作符quote,它只计算表单为数据。因为总是说引号是烦人的,Lisp允许您使用'(data1 data2 data3 ...)代替。
至于'1492,这与Scheme和Common中的1492相同。这些值是可互换的。我会使用1492,因为引用是多余的。
https://stackoverflow.com/questions/70318171
复制相似问题