当您阅读SICP时,您会感到惊讶的概念?

时间:2008-12-10 08:21:38

标签: sicp

SICP - “计算机程序的结构和解释”

相同的解释会很好

有人可以解释 Metalinguistic Abstraction

12 个答案:

答案 0 :(得分:21)

SICP真的开车回家了,可以将代码和数据视为同样的事情。

我在考虑通用图灵机(UTM的输入只是程序的表示)或von Neumann架构(单个存储结构同时包含代码和数据)之前就已经理解了这一点,但SICP提出了这个想法更清楚。 Scheme(Lisp)在这里提供了帮助,因为程序的语法与一般列表的语法完全相同,即S表达式。

一旦你拥有了代码和数据的“等价”,很多事情就会变得容易。例如,您可以编写具有不同评估方法的程序(惰性,非确定性,)。以前,我可能认为这需要扩展编程语言;实际上,我可以自己将它添加到语言中,从而允许核心语言最小化。作为另一个例子,您可以类似地实现面向对象的框架;再一次,这可能是我天真以为需要修改语言的东西。

顺便提一下,我希望SICP提到的更多一点:类型。在编译时间进行类型检查是一件了不起的事情。面向对象编程的SICP实现没有这个好处。

答案 1 :(得分:9)

我还没看过那本书,我只看过视频课程,但它教了我很多东西。作为一等公民的功能对我来说是令人兴奋的。执行“变量”对我来说是一件非常新鲜的事情。看完这些视频后,我现在看到JavaScript和编程方式发生了很大变化。

哦,我想我已经撒了谎,真正让我印象深刻的是+是一个功能。

答案 2 :(得分:5)

我认为真的很酷的是streams延迟评估。关于生成质数的那个是我认为非常整洁的东西。就像“PEZ”分配器一样神奇地分配序列中的下一个素数。

答案 3 :(得分:5)

我认为关于SICP的最令人惊讶的事情是看到制作图灵完整语言实际上需要多少原语 - 几乎任何东西都可以从几乎没有任何东西构建。

由于我们正在讨论SICP,我将在http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/为我提供标准的视频讲座,这是您希望在20小时内获得的最佳计算机科学入门。

答案 4 :(得分:4)

A. Rex的答案中的“数据与代码是一回事”的一个例子让我深入了解。

当我在俄罗斯教Lisp时,我们的老师告诉我们这个语言是关于列表的:汽车,司机,缺点。令我感到惊讶的是,你完全不需要这些功能 - 你可以编写自己的,给定的闭包。所以,Lisp毕竟不是关于列表的!这是一个很大的惊喜。

答案 5 :(得分:3)

我完全不熟悉的一个概念是coroutines的想法,即有两个函数做补充工作,并且程序流控制在它们之间交替。

答案 6 :(得分:2)

当我读SICP时,我还在上高中,我专注于第一章和第二章。对我来说,我喜欢你可以在代码中表达所有这些数学思想,并让计算机完成大部分肮脏的工作。

当我辅导SICP时,我对不同方面印象深刻。首先,数据和代码实际上是相同的难题,因为代码是可执行数据。关于金属语言抽象的章节对许多人来说是令人难以置信的,并且有很多带回家的信息。首先是所有规则都是任意的。这困扰了一些学生,特别是那些心灵上的物理学家。我认为美不在规则本身,而在于研究规则的后果。代码的单行更改可能意味着词法范围和动态范围之间的差异。

今天,尽管SICP对许多人来说仍然充满乐趣和洞察力,但我确实理解它已经过时了。首先,它没有教授调试技巧和工具(我包括那里的类型系统),这对于在当今庞大的系统中工作至关重要。

答案 7 :(得分:2)

我最惊讶于实现语言是多么容易。那个人可以把Scheme的翻译写到黑板上。

答案 8 :(得分:1)

在阅读了SICP的一些章节后,我感受到了不同意义上的递归

答案 9 :(得分:1)

我现在正处于“作为传统接口的序列”部分,并且发现作为一等公民的程序概念非常吸引人。此外,递归的应用是我从未见过的任何语言。

答案 10 :(得分:0)

闭包。

来自一个主要的命令背景(Java,C#等等 - 我大约一年前才读过SICP,现在正在重读它),用函数术语思考是一个很大的启示我;它完全改变了我今天对工作的看法。

答案 11 :(得分:0)

我阅读了本书的大部分内容(无练习)。我所学的是如何在特定级别抽象现实世界,以及如何实现一种语言。

每章都有想法让我感到惊讶:

前两章向我展示了两种抽象现实世界的方法:使用过程进行抽象和使用数据进行抽象。

第3章介绍了现实世界中的时间。这导致状态。我们尝试分配,这会引起问题。然后我们尝试流。

第4章是关于元语言学抽象的,换句话说,我们通过构造一个确定表达式含义的评估器来实现一种新语言。

由于第4章中的评估程序本身是Lisp程序,因此它继承了底层Lisp系统的控制结构。因此,在第5章中,我们将在抽象模型注册机的帮助下深入研究真实计算机的逐步操作。

谢谢。