Lisp和SICP

大概不少programmer都看过《黑客与画家》,作者用了整整一章的篇幅讨论Lisp的强大。我自然就会手痒痒。

几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感。喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等。

但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car,cdr等等。虽然语法很快就学完了,但却很难用它写出以前Python或C#风格的命令式代码。连赋值都变得如此诡异,而且有数不清的方言,定义类时,每种方言都不一样!函数名都超长,变量甚至会用问号感叹号等平时根本不敢想的符号。

在尝试写Lisp一天之后,我无奈的放弃了,它的思路和我之前所有的观念都很不相同!

后来我看了《计算机程序的构造与解释》(SICP).

这本书名气显然没有《编程珠玑》甚至《编程之美》名气大。但它的目录很对我的胃口,流模式,惰性求值,元语言抽象,听着是不是就很有逼格呢?于是我迫不及待的踏上这片土地,一边看一边做习题。

之后发生的事情超出了我的想象,这仅仅是一本MIT的大一新生的入门课程,其思维深度,习题难度和广度都超过了我的想象。怪不得国外有那么多大神,因为人家看过了这样牛逼的教材!它的函数求导和积分的方法,高阶函数,闭包令人叹为观止,函数式风格的操作使之前不可想象的操作成为可能。Lisp递归玩的实在太溜了,它才是函数式编程语言的王者,循环迭代早成了二等公民。SICP一点点地解释程序运行的真正本质,分析结构,环境和抽象。我仅仅看到了第二章,就已经目瞪口呆,颠覆了之前不少的概念,让我极其后悔,为什么没有在大一大二的时候读这本书(那会我估计连看都看不懂)。

很多书信息量都很低,一本书压缩后就剩几页纸。但SICP不一样,这本书不仅无法压缩,而更需要扩充。所以如果真想了解它的精妙,请直接阅读它。任何赞美都是乏力的。

我进而迅速地投入了Lisp的怀抱,是否使用Lisp作为工作语言,这一点都不重要,深入之后,你会感受到数学的精致,理性的荣耀。我才发现,Lisp根本就不是语法,而是一种设计。用之前的编程思路去写Lisp,简直就是暴殄天物。此时,你不会再抱怨语言限制了思维,只会悔恨自己的思维配不上它的能力。

另外,我发现看书一定要做习题,做习题,做习题。大脑学完知识,检验和巩固知识的最佳方式,就是做习题。觉得课本上讲的东西很冗余觉得自己都懂了?做一道习题分分钟被虐狗。看了大神的对习题的解答,才发现这货原来是这样!这可能就是思考的乐趣吧!

时间: 2024-10-10 03:02:57

Lisp和SICP的相关文章

SICP 习题 (2.1) 解题总结

SICP 习题 2.1 要求我们做一个可以正确处理正数和负数的make-rat过程,用于生成一个有理数.条件是分母必须是正数. 完成这道题本身比较简单,就是简单修改一下书中的make-rat过程就可以了. 书中原本的make-rat过程如下: (define (make-rat n d) (cons n d)) 可以发现,原来的make-rat就是简单地将n和d组成一个序对,然后返回这个序对,并没有对分子和分母进行判断. 我们要做的就是修改make-rat过程,判断一下分母d是不是小于0,如果分

SICP1.3 MIT(CLT) Scheme实现(Lisp)

 题目要求给出的函数需要完成以下三件事: 写一个函数,接受三个数作为参数 判断三个数中较大的两个数 计算较大两个数的平方和(两个数的平方之和) 我们从后往前,一步步完成这三个任务. CSDN没有Lisp.用Python的标记了 #lang racket ;;SICP 1.3 ;;try 1 (define (square x)(* x x)) (define (sum x y)(+(square x)(square y))) (define (sum-largest x y z) (cond

C开发者眼中的SICP学习

谈谈自己看SICP的一些体会 第一章  构造过程抽象 这一章其实和C语言完全等价, 不打算深入学习LISP的完全可以快速略过. 基本上没有什么大的价值. 这一章最核心的价值就是下面3句话, 理解了这一章就算看完了. 语言的原型系统 ·如何组合 ·如何提供高层抽象 这3句话是所有语言的核心. 基本上适用所有人. 为什么有人3天学会Java, 有人3年. 关键就在你是否深入理解语言的这3点. 学习任何语言都是直接奔这个主题.所以,有些查字典的完全可以跳过.任何语言, 3天足够入门了. 后面的递归和迭

[SICP Notes] 1.1 The Elements of Programming

About the Book To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by MIT in 1985. The Wizard Book used MIT Scheme, which is

Get start with "Lisp"

Get start with "Lisp" 在<黑客与漫画>中,Paul graham提到什么才是最好的编程语言,Lisp和C被明显的提及,对可谓是Lisp是推崇备至.最近准备看SICP,于是学一下极具逼格的Lisp. The basic, if primitive, way to get Lisp running is to install a command-line Lisp system. This works especially well if you have

nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 .而近期会加入的文章将主要是算法和Android.只是其他内容也会继续完好. About the Author 独立 Windows App 和

SICP学习笔记及题解—构造过程抽象(三)

主要内容 高阶过程:以过程为参数和/或返回值的过程 lambda 表达式 let 表达式 用过程作为解决问题的通用方法 求函数的 0 点 求函数的不动点 返回过程值 过程是语言里的一等公民 (first-class object) 1.3.1高阶过程 过程是抽象,一个过程描述了一种对数据的复合操作,如求立方过程:(define (cube x) (* x x x)) 换个方式,也可以总直接写组合式:(* 3 3 3), (* x x x), 不定义过程,总基于系统操作描述,不能提高描述的层次,

入Function Programming到底我该选择Lisp还是Haskell?

要学习Lisp的,可以看看sicp,当初我花费了一个暑假的时间啃sicp,啃到啃不动了,但是发现确实学到了不少有趣的东西,然后又去玩Haskell,大概学习Haskell断断续续的也有半年的时间,但是我感觉我在Haskell中学到的东西比在sicp学到的东西要多的多,可能是我功力不够,不足以理解sicp中的精髓吧. 学习Haskell让我学到了类型是多么美妙的东西.

SICP 折腾之开发环境

最近一个月, 不管看没看懂, 将SICP全文看了一遍, 大致理解了作者到底要讲写什么东西,处理什么问题. 本人推荐3次读书法. 第一次  不管看不看得懂    将全文全部看一遍, 看不懂的地方,标记什么看不懂. 了解整本书的结构, 每一章主要讲写什么东西, 面对什么问题. 第二次   事无巨细, 全部动手做一次, 务求完全理解. 第三次   用自己的语言,分析总结书中的内容, 尽量转化为自己的东西 很多人, 一看书, 前面几章觉得很难, 后面就坚持不下去了. 这其实是自己最大的损失.任何一本书,