Common Lisp入门笔记(二)赋值与输入输出

摘自 《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))  这就是所谓 Lisp 的副产品


(2)Common Lisp的标准输入运算符是read ,如:

> (SETF A (READ))
>12 


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值