English 中文(简体)
当您阅读SICP时,让您感到惊讶的概念是什么? (dāng nín yuè dú SICP shí, ràng nín gǎn dào jīngqí de gàiniàn shì shénme?)
原标题:
  • 时间:2008-12-10 08:21:37
  •  标签:

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

解释一下会很好。

有人能解释一下语言元抽象吗?

最佳回答

SICP 真正强调了一个重点,就是可以将代码和数据看作是同一件事情。

当考虑到通用图灵机(UTM的输入只是程序的表示)或冯诺伊曼结构(单个存储结构保存代码和数据)时,我就理解了这一点,但SICP使这个想法更加清晰。Scheme(Lisp)在这里有帮助,因为程序的语法与一般列表的语法完全相同,即S表达式。

一旦你达到了代码和数据的"等价性",许多事情就变得容易了。例如,你可以编写具有不同评估方法(惰性、非确定性等)的程序。以前,我可能认为这需要对编程语言进行扩展; 实际上,我可以自己添加它到语言中,从而允许核心语言保持简洁。另一个例子是,你同样可以实现面向对象的框架; 这也是我天真地认为需要修改语言的事情。

顺便提一下,我希望SICP能够更多地提到类型检查。在编译时进行类型检查是一件了不起的事情。SICP中的面向对象编程实现并没有这个优势。

问题回答

我还没有读过那本书,我只看了视频课程,但是它教给了我很多东西。函数作为一等公民对我来说是令人震惊的。执行“变量”对我来说是很新的事情。在观看了这些视频之后,我现在看待JavaScript和编程的方式已经发生了很大的改变。

哦,我想我撒谎了,真正让我震惊的是+是一个函数。

我认为 SICP 最令人惊讶的地方是看到实现大多数功能所需的原语是如此之少,几乎可以从几乎没有东西构建任何东西。

由于我们正在讨论SICP,我会提及我常说的视频讲座,位于 http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/, 它们是最好的20小时计算机科学入门资料。

我认为非常酷的是延迟评估的流。有关生成质数的内容,我认为非常有趣。就像一个魔术般地提供下一个质数的“PEZ”发射器。

A. Rex的一个“数据和代码是同一件事”的例子让我深受启发。

当我在俄罗斯学习Lisp时,我们的老师告诉我们这种语言是关于列表:car、cdr、cons。真正让我惊讶的是,你根本不需要那些函数——你可以根据闭包编写自己的函数。因此,Lisp并不仅仅是关于列表!那真是一个大惊喜。

一个我完全不熟悉的概念是协程的想法,即有两个函数执行互补的任务,并且程序流控制在它们之间进行交替。

我在高中时读了SICP,当时我关注于第一和第二章。对我来说,我喜欢你可以用代码表达所有数学思想,让计算机完成大部分脏活累活。

当我辅导SICP时,我对不同的方面留下了深刻的印象。首先,数据和代码实际上是相同的东西,因为代码是可执行数据。元语言抽象的章节令许多人感到困惑,并且有许多有意义的信息。首先,所有规则都是任意的。这使一些学生感到困扰,特别是那些从内心真诚地钻研物理学的人。我认为美不在于规则本身,而在于研究规则的后果。代码中的一行更改可能意味着词法作用域和动态作用域之间的差异。

今天,尽管SICP仍然对许多人来说很有趣和具有启示性,但我理解它正在变得过时。一方面,它没有教授调试技巧和工具(我也包括类型系统在内),这在今天的庞大系统中工作是必不可少的。

我最惊讶的是实现语言是如此容易。一个人可以在黑板上为Scheme写解释器。

我在阅读《计算机程序的构造和解释》的某些章节之后,对递归有了不同的感受。

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

闭包。

来自主要的命令式背景(Java、C#等等——我只在一年前左右第一次读SICP,现在正在重新阅读),用函数术语思考对我来说是一个重大的启示;它完全改变了我今天对我的工作的思考方式。

我读了该书的大部分(不包括练习部分)。我所学到的是如何在特定层次上抽象现实世界,以及如何实现一种语言。

每一章都有让我惊喜的想法。

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

第3章介绍了现实世界中的时间。结果就是状态。我们尝试赋值,但会出现问题。然后我们尝试使用流。

第四章是关于元语言抽象的,换句话说,我们通过构建求值器来实现一种新语言,以确定表达式的含义。

由于第4章中的评估器本身是一个Lisp程序,它继承了底层Lisp系统的控制结构。因此,在第5章中,我们借助一个抽象模型(寄存器机器)深入探讨了真实计算机的逐步操作。

谢谢。





相关问题
热门标签