JavaScript和SICP

原创 2005年03月02日 14:03:00

这两天公司的项目告一段落,学校的作业不算太难。因此我颇有点闲暇,于是重看SICP,同时学学JavaScript(看了google suggestgoogle maps, 还有CanyonBridgecbconnect, 对JavaScript的兴趣一下浓厚起来)。  Douglas Crockford 说得不错,JavaScript的确和Scheme有很多相似之处。JavaScript的作者一定谙熟函数编程,不然JavaScript的函数是lambda算子也太过巧合了。比如SICP1.1里计算平方根的Newton-Raphson算法:

(define (sqrt x)
  (define (good-enough? guess)
    (< (abs (- (square guess) x)) 0.001))
  (define (improve guess)
    (average guess (/ x guess)))
  (define (sqrt-iter guess)
    (if (good-enough? guess)
        guess
        (sqrt-iter (improve guess))))
  (sqrt-iter 1.0))

换成JavaScript版本近乎机械:

//Newton's method to find /sqrt{x}
function sqrt(x){
 function sqrt_iter(guess){
  if(good_enough(guess)){
   return guess;
  }
 
  return sqrt_iter(improve(guess)); 
 }

 function improve(guess){
  return average(guess, x/guess);
 }

 function average(x, y){
  return (x + y)/2;
 }

 function good_enough(guess){
  return Math.abs(guess * guess - x) < 0.001;
 }

 return sqrt_iter(1.0);
}

呵呵,看来把SICP里的程序用JavaScript重写也是件有趣的事。

呵呵,看来把SICP里的程序用JavaScript重写也是件有趣的事。

SICP学习小结

我一开始在看CSAPP,刚看完第一章,然后看见知乎上萧井陌发表的关于编程入门的新文章。他的推荐是先掌握一门语言比如Python然后看SICP,接着才是CSAPP。我查了一下发现只有400多页,就打算2...
  • viredery
  • viredery
  • 2015年04月13日 18:57
  • 894

SICP第三章学习笔记

第三章 模块化、对象和状态(Modularity, Objects, and State)     当我们需要模拟真实物理系统的程序时,我们可以采用基于被模拟的结构去设计程序的结构,这样,在需要针对系...
  • viredery
  • viredery
  • 2015年04月06日 14:55
  • 374

SICP-Python版本(1.7)

因为无意中看见有人推荐的伯克利的这本教材,使用python教SICP,感觉使用起来更得心应手,毕竟scheme的括号太多用起来不习惯…虽然python不能支持所有的FP特性,但是作为一个初学者,让自己...
  • pp634077956
  • pp634077956
  • 2016年07月10日 23:10
  • 1972

SICP 习题(1.5)解题总结:应用序和正则序

习题1.5 主要讲的是函数参数的求值方式,包括应用序和正则序。解题前如果发现自己对应用序和正则序还不是太清楚,就需要重新看看1.1.5节“过程应用的代换模型”,对应用序和正则序有了较清楚的了解后解习题...
  • keyboardOTA
  • keyboardOTA
  • 2013年08月09日 00:45
  • 4527

sicp in python 资源

sicp in python
  • abc_1234d
  • abc_1234d
  • 2017年06月21日 09:26
  • 630

SICP学习笔记 (2.2.4)

                                                            SICP学习笔记 (2.2.4)                        ...
  • zhouyinhui
  • zhouyinhui
  • 2009年12月20日 08:01
  • 1124

SICP 折腾之开发环境

SICP 开发环境
  • zlf_jack
  • zlf_jack
  • 2014年11月01日 10:43
  • 1356

sicp in python

gitbook英文书:https://www.gitbook.com/book/wizardforcel/sicp-in-python/details中文翻译版:https://github.com/...
  • yz764127031
  • yz764127031
  • 2017年05月08日 21:25
  • 399

SICP chapter2 put get

自己在做的时候挺不方便的附上put get代码帮助需要的朋友们 (define (make-table) (let ((local-table (list '*table*))) (defin...
  • zb1030415419
  • zb1030415419
  • 2016年05月23日 12:36
  • 172

SICP 习题 (1.6) 解题总结:对if语句的特殊处理

SICP 习题 1.6 还是讲的正则序和应用序,问题是从if过程的讨论开始的,习题说到名叫Alyssa P. Hacker的人觉的不需要为if提供一种特殊形式,可以直接用常规过程调用cond来实现。 ...
  • keyboardOTA
  • keyboardOTA
  • 2013年08月14日 06:58
  • 4172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript和SICP
举报原因:
原因补充:

(最多只允许输入30个字)