特殊操作符、函数、宏
0.0 format
CL-USER>(format t "hello world") ;t=>*standard-output*
hello world
NIL
CL-USER>(format t "~a:~10t~a" "This is" "a shinny day")
This is: a shinny day
NIL
~a=>美化输出(如字符串去引号、关键字去前导冒号),消耗任意一个实参
~10t=>制表(从上一个~t开始共10个空格)
~%=>换行
总之变量都是以~开始
1.函数
1.0 y-or-n-p
专门的输入提示函数
(y-or-n-p "continuing [y/n]?") ;当没有输入y Y N n时重新提示,输入这四个字符之一时则返回t or nil
1.1 defvar 、 defparameter
定义变量
CL-USER>(defvar *db* nil) ;定义变量值为nil(双*暗示这是一个全局变量)
*DB*
defvar 定义的变量可以没有初值,一般为持久存在的
defparameter 定义变量必须带初值
1.2 funcall 、apply
与#’配合,调用作为数据打包然后传进来的函数
funcall=>传入的实参个数已知
CL-USER>(funcall #'(lambda (x y) (format t "~a:~a" x y)) 2 3)
2:3
NIL
apply=>传入的实参个数未知
apply在传入作为数据的函数后 期待一个参数列表(列表前灵活的可以有若干孤立实参)
1.3 random
(random number &optional state)
[0 number)
1.4 一些数学函数
1.4.0 expt
幂运算
CL-USER>expt(2 3)
8
1.4.1 isqrt
算数平方根
CL-USER> (isqrt 4)
2
CL-USER>(isqrt 6)
2
1.4.2 mod
取余
CL-USER>(mod 2 3)
2