【问题标题】:Common Lisp: Are all functions built from the core functions, CAR, CDR, CONS, etc?Common Lisp:所有功能都是由核心功能、CAR、CDR、CONS 等构建的吗?
【发布时间】:2016-06-10 23:36:27
【问题描述】:

对还是错?

Common Lisp 有大量的功能。所有这些函数都是使用这一小组核心函数构建(或可以构建)的:CAR、CDR、CONS、ATOM、EQ、QUOTE、COND、LAMBDA、LABEL、NULL。

如果答案为 False,您能否提供一个无法使用核心功能实现的功能的示例?也许核心功能列表不完整,还需要另外一两个核心功能?

【问题讨论】:

  • Common Lisp 有一些 special forms。否则我认为这在很大程度上取决于实现它如何选择实现标准函数/宏。
  • 谢谢。我现在正在查看 LISP 1.5 程序员手册(附录 B)中的 LISP 解释器。看来我是对的,尽管核心集还有一些功能。

标签: lisp common-lisp


【解决方案1】:

[..] 所有这些功能都是使用 [..]

构建(或可以构建

重要的部分是可以,你已经自己弄清楚了。 (几乎*)所有(a)Lisp 都可以使用那一小部分核心函数(形式)来构建,这是 Lisp 之美的一部分。然而,在实践中,未在 Lisp 中实现的函数(表单)集合要大很多

当实现只能实现最小的核心时,为什么还要费心去实现那么多呢?举个小例子,想想这个表达式:

(+ 1 2)

可以实现一个仅使用少量核心函数的 Lisp,并且它能够(给定一个适当的数字解析器)评估这个表达式。 但这会慢得令人痛苦!我们可用的系统(CPU)大多提供许多不同的指令,Lisp 实现(尤其是编译的)试图尽可能多地利用这些指令,以便允许快速执行 Lisp 程序。而且,回到这个例子,这也意味着人们不会使用peano arithmetic 进行实际计算,而是使用硬件中实现的“布尔逻辑算术”。

如果答案为 False,您能否提供一个无法使用核心功能实现的功能示例?

这很简单,你是如何实现format 的?任何不属于编程语言的“算法”性质的东西,即与“外部世界”交互的东西,通常不是本身实现的,而是依赖于底层系统 - 最常见的是 C 或汇编。

【讨论】:

  • 优秀!谢谢丹尼尔清晰而详细的解释。我非常感激。你现在说的很有意义。
【解决方案2】:

错误。任何处理 conses 以外的数据类型的函数都无法从您建议的核心集中实现:例如,NUMBERSYMBOL 等重要类型根本无法处理。任何执行 I/O 的函数,可能还有其他大量的语言。

您的列表听起来像是来自对拟议的 Lisp 1.5 核心的一些不完整描述。

【讨论】:

  • IIRC 这是 McCarthy 的原始论文中的列表。大多数(全部?)类型都可以用某种 peano 之类的编码来处理。 I/O 应该是唯一不能使用给定的函数/表单列表实现的东西。
  • @DanielJour:不能以既具有合理的时间/空间复杂性又按照 CL 指定的方式处理其他类型。
  • 当然不是合理的时间/空间(通过计数相加,并基于乘以相加需要年龄),但肯定有正确的行为。
  • @DanielJour:显然,给定的函数集足以指定 UTM:这不是问题。但是 CL 指定了例如语法,这些函数都不能处理这些语法。如果问题是“这组函数是否足以实现 a Lisp”,那么答案会有所不同,但 CL 有详细的规范,而这组函数不足以实现该规范.
猜你喜欢
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多