绿林网

Land of Lisp读后感摘抄

Land of Lisp读后感摘抄

《Land of Lisp》是一本由Conrad Barski M.D.著作,No Starch Press出版的504 pages (est.)图书,本书定价:386.00 元,页数:October 2009 (est.),特精心收集的读后感,希望对大家能有帮助。

《Land of Lisp》读后感(一):绝对的hacker共鸣。

在我有限的阅读史中这本书绝对时前无古人,很可能也是后无来者。

作者把haker的幽默融入的LIsp的教学中。把Lisp光芒无线的放大了。

这是作者关于本书的主页。 http://landoflisp.com/

不进去一定后悔。

《Land of Lisp》读后感(二):第100页

输入 walk china 命令

输出 You cannot go that way.

:lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol:

《Land of Lisp》读后感(三):关于代码风格

作者说这本书是漫画书,果真不假,好多搞笑的漫画和冷幽默。

后面流和输入输出部分跳过去了,觉得不太重要。

关于惰性求值的AI部分读得有点囫囵吞枣。作者的这种代码风格写小程序还行,程序大了,列表套着列表套着哈希表,很容易忘记cxxr是什么东西,而且对于元组来说cdr就是第二个元素了,对于列表来说cadr才是第二个元素。有时候把列表当alist用,有时候又当树用,虽然说这样是很灵活的,但是我觉得最好还是用struct之类的东西对数据进行一些包装比较好,不容易错,也更可读。

总的来说,很有趣,作为消遣读物是不错的。

《Land of Lisp》读后感(四):好书

Common Lisp的入门书籍我共读过3本。

第一次,我开始读PracticalCommonLisp.chm,但是书籍给我一种不够流畅和有意思的感觉。读到第3章中断。

https://www.dropbox.com/s/2y26d4pe3kjnhvt/PracticalCommonLisp.chm?dl=0

第二次,慕名而来,开始读ANSI Common LISP,但是书籍给我一种炫耀自己数学知识的感觉,读起来有一种生硬感,到处卡壳。读到第4章的样子中断。

https://www.dropbox.com/s/dgmn653dw9urvny/ANSI%20Common%20LISP-new.pdf?dl=0

第三次,读Land of Lisp,读到第二章就发现这是本好书。我确定作者一定是花费了大量的时间来反复调整书籍内容的。因为书籍用语流畅有趣,而且最重要的是,作者的知识点讲解顺序非常流畅,有一种默契感,恰恰在我有疑问的时候,马上就出现了解决疑问的段落。这种默契感,就像是你在看一段写的非常完美的代码,透过代码,你能深刻的感受到作者花费了大量的心思调整代码,直到频临完美。

https://www.dropbox.com/s/3giqx06ubzhz9n5/Land%20of%20Lisp.pdf?dl=0

我在前两本书籍里面遇到的疑问,都在Land of Lisp里面看到了答案,而且是在非常恰当的时机看到了答案。

比如defvar setf let flet几个函数的出现顺序,使读者有了对之有非常明显的对比感知。

比如cadr cadddr等函数的讲解方式。

比如() '() nil 'nil的对比。

比如memeber函数返回列表的意义等的明确讲解。

总之,这真是一本非常不错的入门书籍。但是可惜的是,居然没有中文翻译版。

《Land of Lisp》读后感(五):430页之后漫画部分的翻译

430页之后是漫画了,它解释了Lisp的强大之处,不过有些东西我也不是很懂,最后两个特性我根本看不懂,尽量翻译吧。

Lisp防BUG的利器:

1.函数式编程

函数式编程是一种编程的数学方法,这种方法给程序员很多的限制,但是可以生产出非常优雅的代码。使用函数式编程时函数只能使用以下3钟变量:参数,函数内部生成的局部变量,常量。并且函数式编程不允许函数有副作用,也就是说函数不能写到磁盘,输出到屏幕或者做除了返回结果之外的任何事。函数式编程的目标就是尽量使用函数式的代码,但是一些非函数式的函数有时也是必要的。(好处:由于影响函数结果的因素只有传递给他的变量,所以非常好调试,无论你运行多少次,只要你传递的参数是一样的,那么你得到的返回值也是一样的。坏处:由于编写软件时写一些有副作用的代码是必要的,所以你不可能写出完全是函数式编程的软件,至少会有一部分是非函数式的。)

2.宏

真正的宏是lisp最独特也是最优秀的特性之一。事实上,lisp程序员写这么多烦人的括号就是因为这些括号造就了lisp的宏系统。真正的宏允许你从底层给lisp增加新功能,资深的lisp程序员能用宏让他们的lisp编译/解释器编译得更加优雅。(缺点:过度地使用宏会让你的程序难以理解。)

3.restart机制

正确的异常处理十分困难,有两种解决方案:根本不处理异常,当异常产生直接让你的程序终止,或者处理所有的异常。即使在函数调用栈底端的函数处理了发生的某些异常,程序仍然要面对很多难以解决的问题——有些调用错误有些又没有,而Common Lisp提供了一个解决异常的机制:restart。restart机制类似于一些函数可以事先声明“如果我出错那么可以调用我的重启函数,让我安全的完成工作”,其他的函数如果捕捉到异常就可以解决异常并且重启出现异常的函数。有了重启机制当程序停止运行并且退回到REPL时,程序员可以修复异常,然后尝试所以可能的重启函数,这样就能不结束程序直接重启程序。(缺点:虽然Common Lisp有最好的异常处理系统,但仍然难以处理所有的异常,但是restart机制给了你独特的能力处理运行时的异常,并让程序不终止地继续运行,这在其他语言中根本不可能。)

4.通用的setter

如果要在Common Lisp中修改一个变量的值你可以使用setf。然而这个命令有特殊的能力:除了一个变量的名字之外你也可以传递给他一个复杂的取值表达式,它就可以转变那表达式的形式,并且使用它来改变值,这样的表达式就叫做通用的setter。除了setf还有很多命令支持通用setter,这样大部分的数据结构就可以不用特殊制定一个setter函数了。(优点:当你要处理一个复杂的数据结构时,要取得值往往比要修改值便于理解,因为如果你想改变一个值就需要你理解那个数据结构并且想出一个设置值的办法,但是一旦有了通用setter,你就可以让lisp处理这些问题。缺点:由于setf修改了已经存在的数据结构,所以通用setter违反了第一条:函数式编程,这也意味着你不能在纯函数式编程中使用它。)

5.domain-specific languages(特定领域语言)

由于lisp有极其简单的语法,所以它非常适合构造你自己编程语言,这些特定领域语言会使用很多lisp的宏系统,它们代表了使用宏编程的极端形式。(缺点:由于整个编程语言都是由你自己创建的,所以一不小心就会出bug,并且这也会非常容易产生一些别人难以理解的代码。)

6.CLOS(Common Lisp对象系统)

Common Lisp有最优秀的面向对象编程框架——CLOS。它可以使用元对象协议在最底层进行个性化。(优点:面向对象编程是一个防bug的常用技术。通过将代码写成面向对象形式的,你可以将程序分为不相关的几个部分,这样做的好处就是程序仅仅只是逻辑上相连,所以你可以独立地测试。缺点:对于面向对象编程的批评主要是这种编程方式强迫人们将数据分散地放在不同的地方,这样会使程序变得难以理解,特别是数据经常改变的地方,因此Lisp程序员更加喜欢函数式编程而非面向对象编程虽然这两种方式可以混合使用。)

7.continuation(延续,在Scheme中有支持,在Common Lisp中可以用CPS或者特定的库来实现有限的支持)

在19世纪70年代,一个特殊的lisp方言诞生了,这个方言的特性就是所谓的continuation。这种技术让你可以在代码中进行时间旅行,意思就是它能让你的代码回溯到以前的状态。这种特性在不确定性编程中非常有用。在不确定性编程中,你的代码可能会面对多种选择去做一件事,如果尝试了某种选择后发现不适合,那么这种技术可以让你的代码回溯到以前的状态并且尝试另一种选择。(优点:在你的代码中进行时间旅行常常是非常有吸引力的,这可以让你的代码非常易于理解。缺点:continuation是如此优秀的特性,甚至它连缺点都没有,真正的缺点是它会让语言的设计者头疼,因为这种特性太难以实现了,所以少有语言支持这种方法,而Scheme恰好是其中之一。)

8.brevity(简短,在Arc中有支持,在Common Lisp中可以使用特定的宏来间接支持)

Lisp允许你写一些非常简单的代码,但是又不像Perl那么难看,正是由于上面我们提到的各种特性才让这变得可能。

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐