大概不少programmer都看过《黑客与画家》,作者用了整整一章的篇幅讨论Lisp的强大。我自然就会手痒痒。
     几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感。喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等。
     但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car,cdr等等。虽然语法很快就学完了,但却很难用它写出以前Python或C#风格的命令式代码。连赋值都变得如此诡异,而且有数不清的方言,定义类时,每种方言都不一样!函数名都超长,变量甚至会用问号感叹号等平时根本不敢想的符号。
     在尝试写Lisp一天之后,我无奈的放弃了,它的思路和我之前所有的观念都很不相同!
     后来我看了《计算机程序的构造与解释》(SICP).
     这本书名气显然没有《编程珠玑》甚至《编程之美》名气大。但它的目录很对我的胃口,流模式,惰性求值,元语言抽象,听着是不是就很有逼格呢?于是我迫不及待的踏上这片土地,一边看一边做习题。
     之后发生的事情超出了我的想象,这仅仅是一本MIT的大一新生的入门课程,其思维深度,习题难度和广度都超过了我的想象。怪不得国外有那么多大神,因为人家看过了这样牛逼的教材!它的函数求导和积分的方法,高阶函数,闭包令人叹为观止,函数式风格的操作使之前不可想象的操作成为可能。Lisp递归玩的实在太溜了,它才是函数式编程语言的王者,循环迭代早成了二等公民。SICP一点点地解释程序运行的真正本质,分析结构,环境和抽象。我仅仅看到了第二章,就已经目瞪口呆,颠覆了之前不少的概念,让我极其后悔,为什么没有在大一大二的时候读这本书(那会我估计连看都看不懂)。
     很多书信息量都很低,一本书压缩后就剩几页纸。但SICP不一样,这本书不仅无法压缩,而更需要扩充。所以如果真想了解它的精妙,请直接阅读它。任何赞美都是乏力的。
     我进而迅速地投入了Lisp的怀抱,是否使用Lisp作为工作语言,这一点都不重要,深入之后,你会感受到数学的精致,理性的荣耀。我才发现,Lisp根本就不是语法,而是一种设计。用之前的编程思路去写Lisp,简直就是暴殄天物。此时,你不会再抱怨语言限制了思维,只会悔恨自己的思维配不上它的能力。
     另外,我发现看书一定要做习题,做习题,做习题。大脑学完知识,检验和巩固知识的最佳方式,就是做习题。觉得课本上讲的东西很冗余觉得自己都懂了?做一道习题分分钟被虐狗。看了大神的对习题的解答,才发现这货原来是这样!这可能就是思考的乐趣吧!
   
     

Lisp和SICP的更多相关文章

  1. etlpy: 并行爬虫和数据清洗工具(开源)

    etlpy是python编写的网页数据抓取和清洗工具,核心文件etl.py不超过500行,具备如下特点 爬虫和清洗逻辑基于xml定义,不需手工编写 基于python生成器,流式处理,对内存无要求 内置 ...

  2. 开始lisp的旅程

    不知道是不是<黑客与画家>的老pual太能忽悠了,一直想把他吹捧的lisp学习一下. 看common lisp和On lisp两本书也有一段时间了,中间还夹着看了一点SICP和land o ...

  3. SICP 阅读笔记(二)

    Chapter 1: Building Abstractions with Procedures 2015-09-29 016 Preface of this chapter QUOTE: The a ...

  4. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

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

    Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Wi ...

  6. 【SICP感应】3 级数据和符号数据

    在本书的第二章学习时,有一个问题我一直很困扰,那是2.2.4举例节.因为没有华丽的输出模式书,它只能有一个对的英文字母.两三个月的这浅浅的学校前Common Lisp同样是真实的,当.了非常赞的线条, ...

  7. 【SICP归纳】2 高阶函数和数据抽象

    上一篇博文相应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么. 书中展示了非常多有趣的句法(syntax). 如今我们要让思想进一步的抽象.写这篇博客的时候并未学完整本书.更不敢说 ...

  8. SICP 习题(1.1,1.2,1.3,1.4)解题总结。

    近来在重读SICP,以前读过一次,读了第一二章就没有坚持下去,时间一长就基本忘记了,脑海里什么都不剩,就隐约记得自己曾经读过一本很牛B的书. 这次读希望能够扎实一点,不管能读到哪里,希望可以理解一些东 ...

  9. python + lisp hy的新手注记1

    想在python里用lisp方言hy的目的: 1 用lisp去parse 包含 “数据+简单if控制流(代码.AST)”的配置文件,或者说用包含s-exp的.hy文件作为这类配置文件的实现(而不是用y ...

随机推荐

  1. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  2. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  3. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  4. HashSet HashTable 与 TreeSet

    HashSet<T>类 HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. HashSet& ...

  5. sonn_game网站开发01:写在最前面

    之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...

  6. 关于Layer弹出框初探

    layer至今仍作为layui的代表作,她的受众广泛并非偶然,而是这五年多的坚持,不断完善和维护.不断建设和提升社区服务,使得猿们纷纷自发传播,乃至于成为今天的Layui最强劲的源动力.目前,laye ...

  7. 基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。

        最近一直在研究Paypal的支付平台,因为本人之前没有接触过接口这一块,新来一家公司比较不清楚流程就要求开发两个支付平台一个是支付宝(这边就不再这篇文章里面赘述了),但还是花了2-3天的时间通 ...

  8. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  9. notepad++设置默认打开txt文件失效的解决方法

    1.系统环境 win10企业版,64位系统 2.初步设置 设置txt默认为notepad++打开,菜单:设置->首选项->文件关联 选择对应的文件扩展,点击"关闭"按钮 ...

  10. Entity Framework 教程——Entity Framework中的实体类型

    Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...