CommonLisp:所有函数都是从核心函数CAR、CDR、CONS等构建的吗?

CommonLisp:所有函数都是从核心函数CAR、CDR、CONS等构建的吗?,lisp,common-lisp,Lisp,Common Lisp,对还是错 CommonLisp有一大堆函数。所有这些函数都是使用这一小部分核心函数构建的(或者可以构建):CAR、CDR、CONS、ATOM、EQ、QUOTE、COND、LAMBDA、LABEL、NULL 如果答案为False,您能否提供一个无法使用核心函数实现的函数的示例?也许核心功能列表不完整,需要另外或两个核心功能 […]所有这些函数都是使用[…]构建的(或者可以使用[…]构建) 重要的部分是可以,这是你自己已经弄明白的。几乎所有的Lisp都可以使用这一小部分核心函数(表单)构建,这是Li

对还是错

CommonLisp有一大堆函数。所有这些函数都是使用这一小部分核心函数构建的(或者可以构建):CAR、CDR、CONS、ATOM、EQ、QUOTE、COND、LAMBDA、LABEL、NULL

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

[…]所有这些函数都是使用[…]构建的(或者可以使用[…]构建

重要的部分是可以,这是你自己已经弄明白的。几乎所有的Lisp都可以使用这一小部分核心函数(表单)构建,这是Lisp之美的一部分。但在实践中,Lisp中未实现的函数(表单)集要大得多

那么,当实现只能实现最小的核心时,为什么还要费心实现那么多呢?作为一个小例子,请考虑以下表达式:

(+ 1 2)
您可以实现一个只使用一小部分核心函数的Lisp,并且它能够(为数字提供适当的解析器)计算这个表达式但速度会非常慢我们可用的系统(CPU)大多提供许多不同的指令,Lisp实现(尤其是编译实现)尽量利用这些指令,以便快速执行Lisp程序。回到这个例子,这也意味着我们不会使用实际的计算,而是使用硬件实现的“布尔逻辑算术”

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


这很简单,您是如何实现
格式的
?任何不属于编程语言“算法”性质的东西,即与“外部世界”接口的东西,通常都不是自己实现的,而是依赖于底层系统的,通常是用C或汇编语言实现的。

错误。任何处理conses以外的数据类型的函数都不能从建议的核心集实现:例如,诸如
NUMBER
SYMBOL
之类的重要类型根本不能处理。任何类似于I/O的函数,以及语言的其他广泛领域


您的列表听起来像是来自于对LISP1.5建议核心的不完整描述。

Common Lisp有一些。否则,我认为这主要取决于它如何选择实现标准函数/宏的实现方式。谢谢。我现在正在查看Lisp1.5程序员手册(附录B)中的LISP解释器。看来我是对的,尽管还有一些函数是核心集的一部分。非常出色!谢谢Daniel清晰详细的解释。我非常感激。你说的很有道理。这是麦卡锡最初论文中的列表。大多数(全部?)类型都可以用类似于peano的编码处理。I/O应该是唯一不能使用给定的函数/表单列表实现的东西。@DanielJour:其他类型的处理方法不能同时具有合理的时间/空间复杂度和CL指定的行为方式。当然,不能使用合理的时间/空间(通过计数进行相加,并基于此乘以相加需要时间)但肯定有正确的行为。@DanielJour:显然,给定的函数集足以指定一个UTM:这不是问题。但是CL指定了语法,例如,这些语法都不能处理这些函数。如果问题是“这组函数是否足以实现Lisp”,那么答案可能会有所不同,但CL有一个详细的规范,并且这组函数不足以实现该规范。