CommonLisp有伟大的遗产吗?(学习通用Lisp或更现代的变体(如Scheme)更好吗?)

CommonLisp有伟大的遗产吗?(学习通用Lisp或更现代的变体(如Scheme)更好吗?),lisp,scheme,common-lisp,Lisp,Scheme,Common Lisp,我想从Lisp家族学习一些语言。它可能是CL或Scheme,并尝试将其用于web编程。只是为了好玩。我有重要的C++经验(专业发展)。 但我希望我的选择是没有遗留的现代语言(在语言本身和库中),因为我希望从一开始就学习好的设计模式 我无法决定什么更好:CL还是Scheme。CL有更大和标准化的库和框架(Weblocks),但我听说它在语法和库方面有很多遗产。Scheme是另一个:简单、简洁的语法,但糟糕的库。如果没有遗产,我更喜欢CL 我不喜欢学习像C++这样的怪物。Lisp家族中的CL是否像C

我想从Lisp家族学习一些语言。它可能是CL或Scheme,并尝试将其用于web编程。只是为了好玩。我有重要的C++经验(专业发展)。 但我希望我的选择是没有遗留的现代语言(在语言本身和库中),因为我希望从一开始就学习好的设计模式

我无法决定什么更好:CL还是Scheme。CL有更大和标准化的库和框架(Weblocks),但我听说它在语法和库方面有很多遗产。Scheme是另一个:简单、简洁的语法,但糟糕的库。如果没有遗产,我更喜欢CL

我不喜欢学习像C++这样的怪物。Lisp家族中的CL是否像C++一样?方案是,比如说,C++或java——“修订”C++。 编辑:
我想用函数式风格来写,OOP可能是,但是可选的。

通用Lisp有很多特性,其中一些可能来自遗留问题(我对Lisp历史不太了解,不能肯定)。有很多缺点,比如函数命名和参数顺序不一致。但实际的语言本身,尽管有些地方有点奇怪,却相当理智。不像,比如说,C++……/P> 这个计划也有缺点,但我认为程度要小一些。另一方面,与CL相比,Scheme的标准库很小,因此也没有多少空间容纳疣子。:-)

除了简单的CL和Scheme实现之外,您还拥有两个“下一代LISP”,例如(可能是其中最“现代”的一个,从一开始就设计用于高并发性)和“下一代Scheme”(以前称为PLT Scheme)


我个人对Racket印象深刻,我希望有一天我能用它做点什么。

我是Scheme的粉丝,因为它从一开始就被设计为一致和简单,但仍然具有大多数其他语言所没有的高级功能。由于这些原因,它在教育界和学术界尤其流行


如果你想学习函数式编程,我推荐这本书和Racket或Petite Chez Scheme(两者都是免费的)。

Scheme是70年代中期发明的

CL从1982年开始开发。第一个定义发表于1984年:CommonLisp语言

该计划没有遗产,或者更为现代,这是一个神话。Scheme在CommonLisp之前定义了将近十年。该方案仍然有一些遗留问题,如s表达式、cons单元格、符号、car、cdr、cons等。该方案有着悠久的历史,使其成为Lisp语言家族的一员,Lisp语言家族起源于1958年的第一个Lisp语言

Scheme最初的目标是成为一种比传统Lisp更接近lambda演算的小型干净语言。因此,在Lisp语言中作为默认值的词汇绑定是第一次

不幸的是,在许多其他方面,它只是一种玩具语言。它只有一组非常小的特性,这些特性是编写程序所需要的,比如一种有用的错误处理形式

十年后,Common Lisp的设计目标有所不同。它被设计用来编写商业软件、大型软件、高性能软件。另一个目标是,这是Lisp方言主线(这里是Maclisp)的传统,因此已经拥有大型库或程序的程序员不会从零开始

Common Lisp从第一天起就添加了许多被认为有用的功能:

  • 默认情况下的词汇绑定
  • 记录(称为结构)
  • 基本图书馆
  • 输入输出
  • 类型声明
  • 带有关键字参数的参数列表
  • 编译器提示
  • 读者
还有更多

在90年代中期,CL的修订版出版了。它补充说:

  • 具有可选元对象协议的对象系统
  • 广泛的错误处理系统,条件系统
由于CL一开始比Scheme更大,一些设计决策使得CL比Scheme更易于使用。例如,Scheme只有基本参数列表,这使得库更难使用

Scheme对其标准进行了更多的修订,但基本的设计决策仍然存在,社区正在与错误处理、记录、对象系统等基础知识作斗争。 结果证明R6R是有争议的,我同意批评者的看法。我认为R6RS在方向和内容上都非常令人失望

还有另外两种观点:半标准和单独实现

Scheme社区产生了许多半标准的扩展。这应该被视为一种成功

对于该方案,OTOH的实现存在很大分歧。对这些问题几乎没有达成共识。有许多非常小的实现和许多大的实现

CL实现OTOH已经包含了一个大型语言,所以它们不是从小型开始的。关键字参数就在那里。对象系统也是如此。随着时间的推移,一些应用程序已经确保它们可以在许多实现上基本不变地运行。此外,个别实现还添加了许多特性,如Unicode支持、线程、并发执行等

因此,当前的Lisp实现可以有很多特性

公共Lisp和Scheme都共享Lisp的遗产:符号、s表达式、car、cdr、cons、cons基于单元格的列表。。。还有更多

CommonLisp有一些不太好的部分,但是在标准中定义了。一个例子是CL符号名称在内部是大写的。“序列”的概念在标准中不可扩展。还有更多。单个实现处理CL标准的许多限制。例如,在大多数实现中,I/O系统是用CLO编写的,条件是基于CLO的,SBCL有可扩展的序列,等等

CL可能是一个