Common Lisp:所有功能都是由核心功能CAR,CDR,CONS等构建的吗?

时间:2016-02-27 18:53:06

标签: lisp common-lisp

判断对错?

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

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

2 个答案:

答案 0 :(得分:6)

  

[..]使用[..]构建所有这些功能(或可以构建

重要的部分是可以,你已经想到了。 (几乎*)所有(a)Lisp都可以使用一小组核心函数(形式)构建,这是Lisp之美的一部分。但实际上,在Lisp中未实现的函数(表单)集合是 lot 更大。

为什么实现很难实现那么多,当他们只能实现那个最小的核心?举一个小例子,想想这个表达式:

(+ 1 2)

可以实现一个只使用一小组核心函数的Lisp,它能够(给定一个合适的数字解析器)来评估这个表达式。 但它会非常缓慢!我们可用的系统(CPU)主要提供许多不同的指令,Lisp实现(尤其是编译实现)尽可能地利用它们以便允许快速执行Lisp程序。并且,回到示例,这也意味着不会使用peano arithmetic进行实际计算,而是使用硬件中实现的“布尔逻辑算法”。

  

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

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

答案 1 :(得分:2)

假。任何处理除conses之外的数据类型的函数都无法从您提出的核心集中实现:例如,NUMBERSYMBOL等重要类型根本无法处理。任何同样执行I / O的函数,也可能是其他语言的大部分。

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