【问题标题】:How do I put the code `cons[A;B]` in a repl, run it, and see the output `(A . B)`?如何将代码 `cons[A;B]` 放入 repl,运行它,然后查看输出 `(A . B)`?
【发布时间】:2018-08-11 07:37:41
【问题描述】:

我找到了一个LISP 1.5 Manual,里面有一些代码。

这个来自第 1.2 节

Examples

    cons[A;B]=(A . B)

从阅读手册看来,函数cons 将两个原子作为输入参数AB,并输出一个S 表达式(A . B)

问题:

如何将代码cons[A;B] 放入repl 中,运行它,然后查看输出(A . B)

我希望做类似的事情:

~ $ lisp1.5
> cons[A;B]
=> (A . B)

例如,如果我去https://www.ruby-lang.org/en/ 看到一些代码,我会复制它,在我的shell 中输入irb 并粘贴它。

~ $ irb
irb(main):001:0> puts "Hello World!"
Hello World!
=> nil

【问题讨论】:

  • 你的意思是:(cons 'A 'B)?
  • 请注意,cons[A;B] 是用所谓的元语言编写的,而不是用 Lisp 编写的,而是用 S-Expressions 编写的(如 (cons 'A 'B))。这在手册后面会解释。所以你应该得到一个 lisp(Scheme、Common Lisp 等)解释器/编译器并使用 S-Expressions。
  • 您所描述的是 M 表达式,它是 Lisp 的建议语法,但从未实现。参见,例如the Wikipedia entry for them

标签: lisp metalanguage


【解决方案1】:

手册第 1.2 节解释说,这只是一个符号,用于帮助读者区分函数和 S 表达式(强调我的)。

我们将介绍S-表达式的一些基本函数。 区分 S-表达式本身的函数,我们将函数名写在 I 小写字母,因为原子符号仅由大写字母组成。此外, 函数的参数将分组在方括号中,而不是 括号。作为分隔符或标点符号,我们将使用分号。

后面是一个例子:

cons[A ; B] = (A . B)

手册介绍了 Lisp、它的评估模型、编译器等。 以上是cons的数学定义,其中AB是元变量:对于所有值ABconsAB上的应用是一个缺点-单元格,其中 CAR 部分为 A,CDR 部分为 B。如果有人开发了一种指称语义来表达 Ruby 的评估模型,那么您将拥有相同的定义。如果需要,您可以转换此表示法,即您编写 (cons 1 2) 来具体测试它。但是 1.5 手册可以说不是学习 Common Lisp 的最佳起点,自 1994 年以来就已标准化。您可以尝试以下方法:

请咨询Cliki,Common Lisp wiki。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2017-01-05
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多