首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

lisp初体验-Practical Common Lisp札记-12.数字、字符、字符串

2014-07-11 
lisp初体验-Practical Common Lisp笔记-12.数字、字符、字符串这一章节相当的无趣啊,而且对专业性有一定要求

lisp初体验-Practical Common Lisp笔记-12.数字、字符、字符串

这一章节相当的无趣啊,而且对专业性有一定要求(数学)。来回把读了几遍,仍然感到晦涩。本想跳过,也罢,语言教学带些这种东东,似乎才显的专业啊。那就让我们开始吧~

?

本章要讲的是lisp内建的三种"原子型标准格式":数字,字符,字符串。严格来说,字符串应该算是字符的组合体,不过鉴于其特殊性(估计没有什么现代语言不默认支持字符串的吧),也一并算在里面了。

?

说到数字,很容易就会联想到数学--还有比这更繁复的东西么?Lisp不会让数学变得简单,不过至少,相对于其他语言而言,数学在Lisp中会显得简单、清晰的多。(它本身作为数学工具被发明出来的...)。在Lisp中,你能写出任何你能想到的数字(自己去想),做任何你想要的计算(同上)

?

小学毕业的童鞋应该都知道:一个数字是可以有多种书写方式的,在Lisp中,多种书写方式最终只会呈现出一种结果:

?

CL-USER> 1010CL-USER> 20/210CL-USER> #xa10
?

?

以下是常用的一些对应关系:

?

123                            ==> 123+123                           ==> 123-123                           ==> -123123.                           ==> 1232/3                            ==> 2/3-2/3                           ==> -2/34/6                            ==> 2/36/3                            ==> 2'二进制#b10101                        ==> 21#b1010/1011                    ==> 10/11'八进制#o777                          ==> 511'十六进制进制#xDADA                         ==> 56026'三十六进制,#nr(n代表进制数)#36rABCDEFGHIJKLMNOPQRSTUVWXYZ ==> 8337503854730415241050377135811259267835

?

?浮点类型的:

?

1.0      ==> 1.01e0      ==> 1.01d0      ==> 1.0d0123.0    ==> 123.0123e0    ==> 123.00.123    ==> 0.123.123     ==> 0.123123e-3   ==> 0.123123E-3   ==> 0.1230.123e20 ==> 1.23e+19123d23   ==> 1.23d+25

?

?复数类型的:

?

#c(2      1)    ==> #c(2 1)#c(2/3  3/4)    ==> #c(2/3 3/4)#c(2    1.0)    ==> #c(2.0 1.0)#c(2.0  1.0d0)  ==> #c(2.0d0 1.0d0)#c(1/2  1.0)    ==> #c(0.5 1.0)#c(3      0)    ==> 3#c(3.0  0.0)    ==> #c(3.0 0.0)#c(1/2    0)    ==> 1/2#c(-6/3   0)    ==> -2

?

?

基础数学运算:

?

(+ 1 2)              ==> 3(+ 1 2 3)            ==> 6(+ 10.0 3.0)         ==> 13.0(+ #c(1 2) #c(3 4))  ==> #c(4 6)(- 5 4)              ==> 1(- 2)                ==> -2(- 10 3 5)           ==> 2(* 2 3)              ==> 6(* 2 3 4)            ==> 24(/ 10 5)             ==> 2(/ 10 5 2)           ==> 1(/ 2 3)              ==> 2/3(/ 4)                ==> 1/4(+ 1 2.0)             ==> 3.0(/ 2 3.0)             ==> 0.6666667(+ #c(1 2) 3)         ==> #c(4 2)(+ #c(1 2) 3/2)       ==> #c(5/2 2)(+ #c(1 1) #c(2 -1))  ==> 3
(incf x)    === (setf x (1+ x)) === (setf x (+ x 1))(decf x)    === (setf x (1- x)) === (setf x (- x 1))(incf x 10) === (setf x (+ x 10))(decf x 10) === (setf x (- x 10))

??数值比较:

?

(= 1 1)                        ==> T(= 10 20/2)                    ==> T(= 1 1.0 #c(1.0 0.0) #c(1 0))  ==> T(/= 1 1)        ==> NIL(/= 1 2)        ==> T(/= 1 2 3)      ==> T(/= 1 2 3 1)    ==> NIL(/= 1 2 3 1.0)  ==> NIL(< 2 3)       ==> T(> 2 3)       ==> NIL(> 3 2)       ==> T(< 2 3 4)     ==> T(< 2 3 3)     ==> NIL(<= 2 3 3)    ==> T(<= 2 3 3 4)  ==> T(<= 2 3 4 3)  ==> NIL(max 10 11)    ==> 11(min -12 -10)  ==> -12(max -1 2 -3)  ==> 2

?

?字符、字符串比较格式对比:

=?CHAR= ? ? ?STRING= ? ?/=CHAR/=STRING/=<CHAR<STRING<>CHAR>STRING><=CHAR<=STRING<=>= ? ? ??CHAR>=STRING>=

?

注意:现在的lisp都已21bit的unicode为默认编码(大部分)

?

由于string类型本身是字符的列表形态,所以比较格式也能玩出一些新的花样:

(string= "foobarbaz" "quuxbarfoo" :start1 3 :end1 6 :start2 4

?

本篇略去了原文中许多数学概念,建议有需求、有功底的童鞋参看下原文。

?

(未完待续)

?

?

热点排行