PraticalCommonLisp第三章笔记(1)

刚才准备继续第三章的阅读,突然想起来自己有第三章得阅读笔记。粗略地重新过了一遍笔记,发现效果甚好:),看来记录读书笔记的这个习惯还是挺不错的。因此决定继续保持下去。
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.

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值