Common Lisp 的求解:诡异的“t”
lisp吧
全部回复
仅看楼主
level 1
SarrowBlue 楼主
《实用Common Lisp 编程》中提到,
形如(P12)
(format t "hello, world")
列表第一个元素是函数名,format;
第二个元素,我不知道是什么类型,但是书中提到,t表示标准输出。
*standard-output*的简称(P20)
然后,在添加记录MP3标签记录的地方(P18),
CL-USER> (make-cd "Roses" "Kathy Mattea" 7 t)
(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)
输入的列表,最后一个元素,又成了bool真值。
接着,在3.6 查询数据库(P24)这里,介绍了#'的用法:
CL-USER> (removed-if-not #'evenp '(1 2 3 4 5 6 7 8 9 10))
(2 4 6 8 10)
书中如此解释:
这里的谓词是函数 EVENP,当其参数是偶数时返回真。那个有趣的

#'记号是“获取函数,其名如下”的简称。没有#
'的话,lisp将把
evenp作为一个变量名来对待并查找该变量的值,而不是将其看做函数。
按上面看似矛盾的说法,我到底应该如何看待
(format t "hello, world")
列表中,出现的第二个元素 t 呢?
2015年04月01日 00点04分 1
level 1
SarrowBlue 楼主
我主要是不明白,cl编译器(解释器)是如何区分不同地方的t的。比如C、C++语言,true、false在一个语义段里面,是相对固定的,编译器不会有其他的理解。
而cl显然是不一样。如果你理解内部的解析过程,麻烦你详细解释一下,谢谢。
另外所谓的这些发 表“常识”,对我而言都是新知识。
2015年04月05日 01点04分 3
意义不大,而且这样做不好,时候到了自然就明白了,而且正是能用的上的时候。
2015年04月05日 03点04分
level 7
t无论作为跟对象,布尔真还是特定的流,其定义是与特定类型的符号进行绑定的,只要它是你应用场景里需要的那个类型,就可以使用。
2015年04月25日 00点04分 5
1