刚才准备继续第三章的阅读,突然想起来自己有第三章得阅读笔记。粗略地重新过了一遍笔记,发现效果甚好:),看来记录读书笔记的这个习惯还是挺不错的。因此决定继续保持下去。
1. Think before proceeding to hack..
2. 这章需要完成的程序功能:你有一堆CD,每张CD都有标题和艺术家等信息,你想整理这些CD,并且标识你有多么地喜欢每一张CD,如果你喜欢一张CD,你很可能把它刻录成MP3(这里的CD里的歌曲可能不是mp3格式的吧,我没怎么玩过cd,mp3倒是有:) )。因此又多了一个标识符来标识这张CD是不是已经被刻录了。因此接下来要建立一个小型的记录CD信息的Database。
数据结构定义好了,这个trivial程序就很容易写出来,如果你使用C++,你可以定义一个容器(map或者vector都行),把数据存进去,提供一些接口存数据,另外一些接口读和查询数据。(甚至直接实现sql语句,来查询 :) 扯远了)
这章的目的只是展示一下common lisp的程序大概是什么样的,这里先打住,继续读下去把. :)
3. 又看了一下<<lisp之根源这篇文章》来理解一些基本概念
4.(list 'a 'b 'c) == (cons 'a (cons 'b (cons 'c ())))
5. 怎么保存一个list..还没看到,list不能保存起来每次都写我都觉得有点烦了
6. property list(plist for shot), (getf (list :a 1 :b 2 :c) :a) == 1 对:c做getf操作,编译出错,因为:c没有对应的值f
7.C-c C-q直接自动添加末尾list括号,没有这项功能,数括号都能让你眼晕:)
8.发现emacs里常规的windows的编辑快捷键(比如C-c for "copy", C-v for "paste") just simply doesn't work..离开研究emacs的tutorial去了
emacs的中文的tutorial又一个地方非常好笑:英语的tutorial的最后两行是“from now on....,Reading the screen(第二行)",而中文的最后两行是”从现在开始...",因为中文翻译的问题,把原来英文的两行变成了汉语的一行,然后tutorial告诉你,当使用C-v来滚动屏幕的时候,会留原先屏幕的最后两行成为下一屏的前两行,刚才操作中文教程的时候,发现好像只预留了一行,后来发现原来后面还有一个空行:(
9.太多内容,心静不下来,看了一下基本的光标操作,C-p(previous) 上, C-n(next) 下, c-f(forward) 前, C-b(backword)等的基本操作,还是留着又闲情的时候继续阅读tutorial吧,先姑且用菜单操作
10.format中的directive中的~号类似C里面的printf的%号,一个有趣的例子是,如何用英语念出下面的数字431433443434312809344,lisp可以save your ass => (format nil "~r" 431433443434312809344)
"four hundred thirty-one quintillion four hundred thirty-three quadrillion four hundred forty-three trillion four hundred thirty-four billion three hundred twelve million eight hundred nine thousand three hundred forty-four"
11.shit, 如果要遍历一个list, "~{~}", 要换行"~%", 要输出人看(所谓的美感directive -- aesthetic)的格式"~a",要中间预留8个空格"~8t",因此要打印我们数据库的里的cd:
(defun show-db(db)
(dolist (elem db)
(format t "~{~a:~10t~a~%~}~%"elem))
结果:
CL-USER> (show-db *db*)
TITLE: ZHONGYINI
ARTIST: GIGI
RATING: 99
RIPPED: NIL
TITLE: DONGFENGPO
ARTIST: JAY
RATING: 100
RIPPED: NIL
与书上的写法基本上是一样的,dolist相当于lisp中list的foreach语法,没啥复杂的,只不过是不同的语言下不同的表示方法
或者跟书上一样,既然*db*也只是一个list,那么一句format就搞定,
(defun onetime-shot-show-db(db)
(format t "~{~{~a:~10t~a~%~}~%~}" db))
没啥复杂的。"That’s either very cool or very scary depending on your point of view."
不过倒是经常依着其他语言的性子写出onetime-shot-show-db(*db*)的函数调用方式,惯性的力量! :)
读了3节居然花了2个小时,谁叫我没耐心和仔细呢? :) 明天接着读吧,今天先放放,反正书上的东西目前未知都消化过了。
12.
1. Think before proceeding to hack..
2. 这章需要完成的程序功能:你有一堆CD,每张CD都有标题和艺术家等信息,你想整理这些CD,并且标识你有多么地喜欢每一张CD,如果你喜欢一张CD,你很可能把它刻录成MP3(这里的CD里的歌曲可能不是mp3格式的吧,我没怎么玩过cd,mp3倒是有:) )。因此又多了一个标识符来标识这张CD是不是已经被刻录了。因此接下来要建立一个小型的记录CD信息的Database。
数据结构定义好了,这个trivial程序就很容易写出来,如果你使用C++,你可以定义一个容器(map或者vector都行),把数据存进去,提供一些接口存数据,另外一些接口读和查询数据。(甚至直接实现sql语句,来查询 :) 扯远了)
这章的目的只是展示一下common lisp的程序大概是什么样的,这里先打住,继续读下去把. :)
3. 又看了一下<<lisp之根源这篇文章》来理解一些基本概念
4.(list 'a 'b 'c) == (cons 'a (cons 'b (cons 'c ())))
5. 怎么保存一个list..还没看到,list不能保存起来每次都写我都觉得有点烦了
6. property list(plist for shot), (getf (list :a 1 :b 2 :c) :a) == 1 对:c做getf操作,编译出错,因为:c没有对应的值f
7.C-c C-q直接自动添加末尾list括号,没有这项功能,数括号都能让你眼晕:)
8.发现emacs里常规的windows的编辑快捷键(比如C-c for "copy", C-v for "paste") just simply doesn't work..离开研究emacs的tutorial去了
emacs的中文的tutorial又一个地方非常好笑:英语的tutorial的最后两行是“from now on....,Reading the screen(第二行)",而中文的最后两行是”从现在开始...",因为中文翻译的问题,把原来英文的两行变成了汉语的一行,然后tutorial告诉你,当使用C-v来滚动屏幕的时候,会留原先屏幕的最后两行成为下一屏的前两行,刚才操作中文教程的时候,发现好像只预留了一行,后来发现原来后面还有一个空行:(
9.太多内容,心静不下来,看了一下基本的光标操作,C-p(previous) 上, C-n(next) 下, c-f(forward) 前, C-b(backword)等的基本操作,还是留着又闲情的时候继续阅读tutorial吧,先姑且用菜单操作
10.format中的directive中的~号类似C里面的printf的%号,一个有趣的例子是,如何用英语念出下面的数字431433443434312809344,lisp可以save your ass => (format nil "~r" 431433443434312809344)
"four hundred thirty-one quintillion four hundred thirty-three quadrillion four hundred forty-three trillion four hundred thirty-four billion three hundred twelve million eight hundred nine thousand three hundred forty-four"
11.shit, 如果要遍历一个list, "~{~}", 要换行"~%", 要输出人看(所谓的美感directive -- aesthetic)的格式"~a",要中间预留8个空格"~8t",因此要打印我们数据库的里的cd:
(defun show-db(db)
(dolist (elem db)
(format t "~{~a:~10t~a~%~}~%"elem))
结果:
CL-USER> (show-db *db*)
TITLE: ZHONGYINI
ARTIST: GIGI
RATING: 99
RIPPED: NIL
TITLE: DONGFENGPO
ARTIST: JAY
RATING: 100
RIPPED: NIL
与书上的写法基本上是一样的,dolist相当于lisp中list的foreach语法,没啥复杂的,只不过是不同的语言下不同的表示方法
或者跟书上一样,既然*db*也只是一个list,那么一句format就搞定,
(defun onetime-shot-show-db(db)
(format t "~{~{~a:~10t~a~%~}~%~}" db))
没啥复杂的。"That’s either very cool or very scary depending on your point of view."
不过倒是经常依着其他语言的性子写出onetime-shot-show-db(*db*)的函数调用方式,惯性的力量! :)
读了3节居然花了2个小时,谁叫我没耐心和仔细呢? :) 明天接着读吧,今天先放放,反正书上的东西目前未知都消化过了。
12.