M表达式列表[x;y]在LISP中的作用是什么?
我正在读麦卡锡写的《口齿不清》的论文(远远超过我的技能)。在定义(LABEL,f,e)的求值时,他使用了一个M表达式(我认为这是一个M表达式,如果我错了请纠正我)M表达式列表[x;y]在LISP中的作用是什么?,lisp,s-expression,Lisp,S Expression,我正在读麦卡锡写的《口齿不清》的论文(远远超过我的技能)。在定义(LABEL,f,e)的求值时,他使用了一个M表达式(我认为这是一个M表达式,如果我错了请纠正我)list[x;y]。 {实际上,list[cadar[e];car[e]} 根据我的理解,它象征着(e1,e2),其中e1和e2是S表达式。我是对的还是别的什么,以及list[x;y]的对应表达式是什么 谢谢。在元语言中,表达式list[a;b]表示函数list对两个参数的应用,这两个参数分别是a和b求值的结果,构建了一个包含两个元素的
list[x;y]
。
{实际上,list[cadar[e];car[e]
}
根据我的理解,它象征着(e1,e2),其中e1和e2是S表达式。我是对的还是别的什么,以及list[x;y]
的对应表达式是什么
谢谢。在元语言中,表达式
list[a;b]
表示函数list
对两个参数的应用,这两个参数分别是a
和b
求值的结果,构建了一个包含两个元素的列表
在S表达式的语言中,这将被写成通常的函数调用:
(LIST a b)
,即第一个元素是函数名(LIST
),其余元素是函数的实际参数。请注意,这里我使用符号(ab)
表示S表达式,而不是(a,b)
。麦卡锡自己后来在lisp1.5程序员手册中更改了这个符号。2.麻省剑桥教育出版社:麻省理工学院公共关系,1979。
使用了新的符号。那么cons[x;y]
和list[x;y]
之间的区别是什么?是不是在list[x;y]
中,x
和y
代表原子?@Geek,x
和y
代表计算为数据的通用(元)表达式(例如原子、conses、数字等,换言之,S表达式)List
不同于cons
,因为cons是一对两个S表达式,而1个元素的列表是带NIL的元素的cons,2个元素的列表是带NIL的第一个元素的cons,第二个元素的cons,等等。参见,其中第一部分是对您引用的文章的重写。@Geek(cons x y)
构造了一个单元格,其car
是x
的值,其cdr
是y
的值。例如(cons12)
使(1.2)
。相比之下,(列表12)
生成了(12)
,一个包含两个cons单元格的对象,相当于(1.(2.nil))
。表达式(list x y)
产生与(cons x(cons y nil))
相同的结果。list
函数必须迭代参数并将单元格分配给它们(可能通过调用cons
,每个参数调用一次),将它们放在一个nil
终止的列表中,然后返回该列表。