SICP不是我的菜

看了一段时间SICP,发现它不是我的菜。SICP的讲述内容,我是非常赞同的,但是讲述方式我不喜欢。

1)big map?没有一个大图,我会没有方向感。或许是东西方文化的差异。总之,我需要知道一个总体思路、或一个出发点相对的位置。SICP的讲述方式,就如同玩红警游戏,开始的时候,周围都是黑的。其实想一想,如果你是一个编程的初学者,什么都不懂,这种搞法好像也不错。但是我就是不习惯。在什么都不懂的人面前说话,和应该说的话,嗯,似乎不应该过于挑剔。

翻看其前言,我看到了《编程导论(Java)·1.2.2空白与注释》中引用的一句话:程序必须是写给人读的,仅仅偶尔让机器执行——Abelson and Sussman

我写《编程导论(Java)》时没有看过这本书,晕。

2)语言的介绍问题。SICP似乎把语言问题默认为读者自己搞定?学习Scheme,语言标准是必看或必查的。网上有王咏刚翻译的版本(2004),还不错(4.1.6的翻译有点问题)。

yqj2065比较《编程导论(Java)》和SICP,对待语法问题都比较轻视,很多时候将(特别是使人纠结的)语法细节放在练习题中。ok。但是,Scheme的类型,你不要遇到一个讲一个,至少在前面有一个概要吧?

Revised5 Report on the Algorithmic Language Scheme

3)条理化

SICP偏爱数学和数据结构,这是可以理解的,但,是不是偏爱得多了点。yqj2065准备按照《编程导论(Java)》的框架,学习Scheme和函数式编程语言方面的知识。

4)你说什么呢?

有时候,yqj2065真的不知道作者在说什么。或者说,某些章节,他为什么这样写。例如

【1.1.4 复合过程(Compound Procedures)

define (square x) (* x x))

....这样就有了一个复合过程(Compound Procedures)。】这个"复合过程"和一般的函数/过程有不同吗?需要一个新术语总会意味着些不同,提心吊胆地看了半天,还是不知道哪里看漏了。如果标题为函数定义或函数抽象,都很好理解。偏偏叫复合过程。@%……¥……%

然后,

【1.1.5 过程应用的代换模型 对于复合过程,过程应用的计算过程是:将复合过程应用于实参,就是在讲过程体中的每个形参用对应的实参取代后,对该过程求值。】

到处是复合过程,我怀疑是不是因为过程这个词不好?如果叫函数就可能不需要复合函数了。

 

好的。我们知道了过程应用的计算过程。然后他【举例(f 5)....

上面描述的这种计算过程称为过程应用的"代换模型",...这个模型不过是用于用于理解过程应用的“意义”的模型。】

这里的"代换模型"到底指“过程应用的计算过程”,还是举例的解释?或者说,“过程应用的计算过程”是对的吗?

然后【应用序和正则序

按照1.1.3节给出的求值描述...】

我真的不懂他为什么要这样写。1.1.3节给出的组合式的求值 和 过程应用的计算过程,有区别吗?+和square 有区别吗?

[应用序和正则序](我更喜欢叫适用序与标准序)其实是很简单的概念:

(define (square x) (* x x)) 

(square (+ 2 3))是使用5作为参数还是以(+ 2 3) 作为参数?丘奇的lambda计算是直接用形参(+ 2 3)替换的,所以叫标准形式;而先求值(+ 2 3)在用5替换,是经济适用的形式,所以叫适用序。

回头看,一般表达式(1.1.3节给出的)求值,就是一个适用序的例子;而“过程应用的计算过程”,也采用适用序,如同Java中的求值过程一样。

所谓的"代换模型",真的不过是采用了适用序的一种解释方式,后面由于副作用问题,作者提出的所谓“环境模型”,不过是一种如同Java的方法调用栈的东西。

顺便说一下,frame翻译成框架,在我粗粗翻阅时,不知道是什么神奇的东西——他画了那些神秘的图,用Java中的术语,stack frame——栈帧。不过Scheme使用的帧叫Java的简单。

 

类似的地方很多。

 


 

若干问题(增减中...)

现在遇到的第一个问题,就是Scheme的动态类型语言(dynamic typed language)特点。例如

 

  • Scheme的数据有自己的类型,但是所有变量(variable)拥有同样的类型:指向任何数据的指针。
  • Scheme如何在运行时进行类型检查(typechecking)
  • Scheme的函数,其返回值的类型可能是不确定的。在高阶函数中如何限定其类型。

命名空间问题。Scheme的方案太简陋了,和C有一比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值