Scheme or Common Lisp

3
对于我的一个学校项目(自由选择的项目),我计划通过学习SICP(计算机程序的构造和解释)并学习Scheme。之后,我想用它创建一些有趣的东西(也是这个项目的一部分)。然而,从我所读到的内容来看,Scheme可能不是用于项目的最佳方言,使用Common Lisp可能更好。(https://stackoverflow.com/questions/108201/common-lisp-or-scheme)。但是,这意味着我不能使用SICP来学习它吗?
我还考虑了先学习Scheme,然后再学习Common Lisp的选项,但显然它们之间存在一些“微妙”的差异,这可能非常妨碍。
什么是最好的选择?只是学习Scheme并使用它?学习Scheme,然后再学习Common Lisp?还是跳过Scheme(和SICP),只是学习Common Lisp?或者还有更好的选择吗?

2
请查看Eli Barzilay在Stack Overflow上对这个问题的出色回答:https://dev59.com/jnM_5IYBdhLWcg3w8IHR -- 希望它能说服你在阅读SICP时选择Scheme路线! - Michał Marczyk
1
即使您以后想使用通用Lisp,您会发现您所学的70%适用于一般编程,90%适用于通用Lisp。 - mqp
3个回答

4
Common Lisp和Scheme之间的区别被高估了。虽然它们确实存在,有些是重要的,但对于实际工作来说,你学习其中一个然后再学另一个都不会有任何问题。当我经常写两者时,我可以毫不费力地在它们之间切换。
如果您计划开始学习SICP,则应该开始学习Scheme。如果您计划开始您的项目并决定需要Common Lisp,请开始学习Common Lisp。在此之后学习第二种方言非常容易。
有几件事情需要考虑。项目类型最重要:Scheme非常适合语言设计项目。如果您的项目是新的、奇怪的语言(或仅仅是语言功能)的解释器/编译器/解析器等,则Scheme是理想的选择。另一方面,Common Lisp在需要许多基本实用程序已内置的领域非常强大,但您预先不知道正在构建的内容——大多数时间您会得到一个DSL。这就是为什么它在人工智能领域如此流行。(这是我用它进行编码的类型。)
其次是PLT具有低学习曲线的Scheme IDE,称为DrScheme。Common Lisp有一个高学习曲线的Emacs插件,称为Slime。根据我的经验,Slime更强大,但需要足够的学习时间,特别是如果这是一个学期项目(尤其是如果您不使用Emacs)。

1

SICP是一本相对较旧的书,使用了较旧版本的Scheme。该书中主要只使用了基本的Scheme特性。因此,在Common Lisp中编写该书中的练习解决方案相对容易,只需具备一定的技能水平即可将代码翻译成Common Lisp。这里有一个在Common Lisp中进行SICP练习的示例

SICP更多地是一本关于编程和计算机科学的通用书籍,而不是关于Scheme或Lisp编程的书籍。对于这方面的内容,其他书籍更好。对于Common Lisp,可以看看《实用Common Lisp》作为一个良好的起点。


0

一旦你学会了Scheme并完成了SICP,你的函数式编程能力将会相当不错。

那时候,学习Common Lisp将会很容易。你认为当你已经掌握了Java后,学习C#是个问题吗?


而且,至少对于初学者来说,在学习SICP的同时学习通用Lisp可能会比坚持Scheme更困难。我倾向于同意@Yin的看法,一旦你掌握了Scheme(如果你已经通过SICP工作做到了这一点),你就能够应对通用Lisp。反过来则更加困难,因为没有像SICP那样好的文本来学习关于通用Lisp中的计算机知识。 - High Performance Mark
1
我认为Practical Common Lisp是学习Common Lisp的好起点。 - Nathan Shively-Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接