Scheme和Common Lisp之间有什么实际区别? (或任何其他两种Lisp方言)

时间:2011-03-20 11:12:18

标签: lisp scheme common-lisp racket sicp

注意:我不是在问哪个学习,哪个更好,或者类似的东西。

我选择了SICP的免费版本,因为我觉得阅读会很好(我听说过很好的东西,而且我对这种编程方面很感兴趣)。

我知道Scheme是Lisp的一种方言,我想知道:Scheme和Common Lisp之间的实际区别是什么?

似乎有很多关于'CL有一个更大的stdlib ...方案不适合现实世界的编程......'但实际上并没有说'这是因为CL就是这个/有这个'。

4 个答案:

答案 0 :(得分:88)

答案 1 :(得分:19)

一些基本的实际差异:

  • Common Lisp具有变量和函数的单独范围;而在Scheme中只有一个范围 - 函数是值,定义具有特定名称的函数只是定义设置为lambda的变量。因此,在Scheme中,您可以使用函数名作为变量并将其存储或传递给其他函数,然后使用该变量执行调用,就像它是函数一样。但是在Common Lisp中,您需要使用(function ...)将函数显式转换为值,并使用(funcall ...)显式调用存储在值中的函数
  • 在Common Lisp中,nil(空列表)被视为false(例如在if中),并且是唯一的false值。在Scheme中,空列表被认为是真的,并且(不同的)#f是唯一的假值

答案 2 :(得分:8)

这是一个难以回答的难以回答的问题,特别是因为许多LISP人员会将Scheme归类为LISP。

Josh Bloch(这个类比可能不是他的发明)描述选择一种类似于选择当地酒吧的语言。那么,那么:

“Scheme”酒吧里面有很多编程语言研究人员。这些人非常关注语言的含义,保持定义和简单,并讨论创新的新功能。每个人都有自己的语言版本,旨在让他们探索自己特定的编程语言角落。 Scheme人们非常喜欢他们从LISP获取的带括号的语法;它灵活,轻便,统一,消除了语言扩展的许多障碍。

“LISP”酒吧?嗯......我不应该评论;我没有在那里度过足够的时间:)。

答案 3 :(得分:2)

方案:

  • orginally很少的规格(新的R7RS似乎更重)
  • 由于语法简单,可以快速学习方案
  • 实现提供了附加功能,但名称可以在不同的实现中有所不同

常见的lisp:

  • 许多功能由更大的规范
  • 定义
  • 函数和变量的不同命名空间(lisp-2)

这是一些要点,确定还有更多,我现在还不记得了。