在Clojure中使用SICP代替Scheme


11

我是软件工程课程的大三学生,我提出了将SICP读给一位顾问的想法,以便对我们设计的所有软件背后的原理有更深入,更基本的了解。

他建议不要学习Scheme来完成本书(因为它不像Lisp的现代方言那么普遍),而应该使用Clojure进行练习。

这本已经很困难的书,如果我在更现代的Clojure中尝试该书的练习,那将如何工作?例如,我找不到任何实际的解决方案,他们为Scheme教的语法是不同的,等等。

Answers:


14

在大学的第一年,我参加的第一门编程课程是使用SICP(即1988年)。但是,我也遇到了类似的问题:对于我自己的计算机(实际上是Commodore Amiga),当时没有Scheme实施可用,只有一个不同的Lisp方言(我不记得它的名字了)。

但是,鉴于Lisp的灵活性,仅通过在一些脚本中添加缺少的lisp宏和函数来“模拟” Scheme语法非常简单。实际上,这足以执行本课程中第1至第3章所需的所有练习(请注意,SICP实际上不需要完整的Scheme堆栈,您只需要一个小子集)。

因此,由于Clojure是AFAIK的一种现代Lisp方言,我想您可以做类似的事情,这使您可以完全自由地选择用Scheme或Clojure或两者混合编写东西。

当然,直接用Clojure解决练习也是可行的,两种语言都非常相似。更重要的是,SICP 是不是编程语言的语法,它是关于正确使用抽象的编程(例如,使用功能,数据和对象)。因此,不要过多考虑可能的语法问题,这些问题不在本书重点范围之内,而且很可能与您无关。


6
唯一的问题我可以预见的是,Clojure的缺乏1. TCO(recur只处理尾递归,不是一般的呼叫)和2缺乏call-with-current-continuation是需要第4章这
丹尼尔Gratzer

2
@jozefg:我认为,如果OP成功通过1-3章,他很可能将不再抱怨Clojure和Scheme之间的句法差异;-)
Doc Brown

@DocBrown考虑编辑荷兰国际集团约章澄清1-3在您的评论将上述答案(并可能与第4章解释的问题,如果你同意意见讨论这些
蚊蚋

@gnat:评论肯定是正确的,但是恕我直言有点简洁。我回答的重要部分是最后一段。
布朗

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.