标签:
摘自 《Lisp语言- 陈光喜》
一、赋值
(1)let
Lisp中使用let来完成局部变量的定义。其形式为:(let  ((var1 exp1)(var2 exp2)…(varn expn)) 
                                                                                               exps) 
其中操作符 let 表明将定义局部变量。 (vari expi)对表示变量名 vari, 该变量的初始值为表达式 expi的值。Let 语句中的 exps 部分为表达式集合,完成所需要的处理。所定义的诸变量 var1,…,varn在这些表达式有效,即在 let 语句体内有效。整个 let 语句的返回值为语句体中最后一条语句的值。如:
>(let ((a 1) (b 2) (c (+ 5 3))) 
         (+ a (* b c)) 
         (- (* a c) (* b c))) 
>-8 
(2)defparameter
defparameter用来实现全局变量定义。一般约定全局变量的命名为左右各写一个*号,如:
> (defparameter *var* 123) 
>*VAR* 
(3)defconstant
defconstant 用来定义全局常量,如:
>(defconstant c 12)
>C
要判断某个符号是否被定义为全局变量或常量,可以使用 boundp 来检验。例如:
>(boundp ‘c)
>T
(4)setf
setf是常用赋值操作符。对某个符号(没有定义为局部变量)首次使用setf赋值,该符号将被系统作为全局变量。这是一种隐式定义全局变量的方法,但是不值得提倡。
>(setf *var* 1234)
>1234
二、 输入输出
(1)Common Lisp 最常用输出命令是format。用法如下:
> (format   t   "~%The clever dog can do ~A + ~A =~A ." 2 35) 
The clever dog can do 2 + 3 =5 . 
NIL 
Fortmat 的第一个参数是输出地,此例的参数 t 表示输出到 toplevel;第二个参数是输出格式串,~%
表示换行, ~A 表示该位置将用对应的参数进行替换。 Common Lisp 的打印格式串有多种控制符,如:
~A,~S,~P  是用于对象控制的。例如,
>(format t "~%TildeS prints ~S~%TildeA prints ~A " ‘ACL::asymbol ‘ACL::asymbol ) 
TildeS prints ACL::ASYMBOL 
TildeA prints ASYMBOL  
NIL 
此例应注意~A 与~S 差别。~S 可以打印出控制符,而~A 不能。~P 打印复数后缀”s”。
~D ~B ~O ~X ~R 为整数控制符,它们分别打印十进制、二进制、八进制、十六进制、基数。
> (format nil " ~D ~B ~O ~X ~R" 12 12 12 12 12) 
" 12 1100 14 C twelve" 
~E ~F ~G ~$为浮点数控制符,分别按照指数格式、定点式、浮点式、浮点定点结合方式。例,
> (format nil " ~E ~F   ~G ~$" 123450 123450 123450 123450) 
" 1.2345E5 123450.0   123450.      123450.00" 
>    (format nil " ~E ~F   ~G ~$" 123.450 123.450 123.450 12.3450) 
" 1.2345E2 123.45   123.45      12.35" 
~n%,~n&,~|  为空白控制符,分别表示 n 换行,n-1 行,新一页。
>   (format nil "begin ~2% and   ~2&end") 
"begin  
 and   
end " 
值得注意的是,在上述例子中,format 的第一个参数为 nil 时,打印执行后返回值不出现 nil;而参数
为 t 时,打印执行后返回值出现 nil> (SETF A (READ))12 
12 ,这就是所谓 Lisp 的副产品
(2)Common Lisp的标准输入运算符是read ,如:
> (SETF A (READ))
>12 
标签:
原文地址:http://blog.csdn.net/zhutulang/article/details/51346968