M表达式列表[x;y]在LISP中的作用是什么?

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求值的结果,构建了一个包含两个元素的

我正在读麦卡锡写的《口齿不清》的论文(远远超过我的技能)。在定义(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
求值的结果,构建了一个包含两个元素的列表


在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
终止的列表中,然后返回该列表。