【问题标题】:What does the M-expression list[x;y] do in LISP?LISP 中的 M 表达式 list[x;y] 有什么作用?
【发布时间】:2018-01-09 14:44:00
【问题描述】:

我正在阅读 McCarthy 在 LISP 上的 this 论文(远超我的技能)。在定义 (LABEL, f, e) here 的评估时,他使用了 M 表达式(我认为这是一个 M 表达式,如果我错了,请纠正我)list[x;y]。 {其实是list[cadar[e];car[e]]}。

根据我的理解,它象征着(e1, e2),其中e1和e2是S-表达式。是我说对了还是别的什么,list[x;y]的对应表达是什么?

谢谢。

【问题讨论】:

    标签: lisp s-expression


    【解决方案1】:

    在元语言中,表达式list[a; b] 表示将函数list 应用于两个参数,它构建了一个包含两个元素的列表,这两个元素分别是ab 的评估结果。

    在 S 表达式的语言中,这将被写成通常的函数调用:(LIST a b),这是一个列表,第一个元素是函数的名称 (LIST),其余的元素函数的实际参数。请注意,这里我使用符号 (a b) 表示 S 表达式,而不是 (a, b)。 McCarthy 自己后来更改了这种表示法,并在 LISP 1.5 Programmer’s Manual. 2. ed. Cambridge, Mass: MIT Pr, 1979. 中使用了新的表示法。

    【讨论】:

    • 那么cons[x ; y]list[x ; y] 之间的区别是什么?是 list[x ; y]xy 代表原子吗?
    • @Geek、xy 代表计算数据的通用(元)表达式(例如原子、conses、数字等,换句话说,S 表达式) . Listcons 不同,因为 cons 是一对两个 S 表达式,而 1 个元素的列表是具有 NIL 的元素的 cons,2 个元素的列表是第一个元素的 cons 和 cons第二个是 NIL 等。参见Lisp 1.5 Programming Manual 的第 36-37 页,其中第一部分是对您引用的文章的重写。
    • @Geek (cons x y) 构造一个单元格,其carx 的值,其cdry 的值。例如(cons 1 2) 使(1 . 2)。相比之下,(list 1 2) 生成 (1 2),一个包含两个 cons 单元格的对象,相当于 (1 . (2 . nil))。表达式(list x y) 产生与(cons x (cons y nil)) 相同的结果。 list 函数必须遍历参数并为它们分配单元格(可能通过调用 cons,每个参数一次),将它们放在一起返回的 nil 终止列表中。
    猜你喜欢
    • 2012-02-20
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多