1 字面数值
在CL中,给定类型的数字可以有多种不同的字面表示方式,这些不同的形式将被读取器转化成相同的对象表示。例如10,20/2等都表示10。有理数在读取后都被规范化,分数被化简;
整数语法:[+/-]123456
比值语法:[+/-]1/4.2
整数数值可以以特定的进制进行解释
#b 二进制 #0 八进制 #x 十六进制 #36 三十六进制-数字集合从0-9 A-Z中取值
CL定义了四种浮点数类型:短型、单精度、双精度、长型,其精度和表示范围依次递增
复数以#C开始加两个数字的列表,分别表示实部和虚部;如果虚部为0,则LISP会简化为实数。
2 数学函数
2.1 算术运算
多元运算符:+ - * /
单元运算符:+ - * /
如果参数都是相同类型的数(有理数、浮点数或复数),则结果也是同类型的。浮点和复数是有传播性的,如果实参中存在复数,则其他数会被转化为浮点数参加运算。复数也是如此。
2.2 截断
floor 向负无穷截断
celling 向正无穷截断
round 进行舍入操作,如果值在中间,则向偶数接近
truncate向0截断
mod 取模
rem 取余数
1+ 返回+1
1- 返回-1
2.3 数值比较
= 用数学意义的值来比较数字,而忽略类型的区别。EQL会考虑类型。
/= 不等
< > <= >=检查实数的序列
以上这些函数都可以用超过两个参数来调用
min max用来取最值
zerop,minusp,plusp用于判定参数的符号特性
evenp,oddp 用于奇、偶判定
2.4 高等数学
log
exp
expt
sin/cos/tan
asin/acos/atan
3 字符
字符语法:#\后加字符,任何字符都可,例如" (
为了处理特殊字符,支持按命名如space newline tab page linefeed return和backspace
字符有其一套比较函数
数值相似符 |
大小写敏感比较 |
大小写无关比较 |
= |
char= |
char-equal |
/= |
char/= |
char-not-equal |
< |
char< |
char-lessp |
> |
char> |
char-greaterp |
<= |
char<= |
char-not-greaterp |
>= |
char>= |
char-not-lessp |
4 字符串
字符串是一维的向量,可以用向量的操作来访问。但其提供了自己的处理函数。
字符串写在闭合的双引号里,可以在字符串中包含任何字符集的支持字符,除了双引号和反斜线。当然,通过转义,也可包含这两个符号。
类似的,字符串也有自己的比较函数,这些函数只能比较两个字符串。其带有命名参数,可以指定两个字符串的子串来进行比较。
(string= "abc" "aaa" :start1 0 :end1 1 :start2 0 :end2 1)
数值相似符 |
大小写敏感比较 |
大小写无关比较 |
= |
string= |
string-equal |
/= |
string/= |
string-not-equal |
< |
string< |
string-lessp |
> |
string> |
string-greaterp |
<= |
string<= |
string-not-greaterp |
>= |
string>= |
string-not-lessp |
此外,length返回字符串的长度。