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))12

12 ,这就是所谓 Lisp 的副产品

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

> (SETF A (READ))

>12

时间: 2024-11-01 19:31:21

Common Lisp入门笔记(二)赋值与输入输出的相关文章

Common Lisp入门笔记(一)7个基本运算符

摘自 <Lisp语言- 陈光喜> 表达式实例: >(+ 1 2) >3 Common Lisp表达式求值规则是: 首先对每个参数从左到右进行求值: 其次将这些已经求值的参数作为运算符函数的参数进行函数调用求值: 所求得的值作为表达式的值返回. 一.Lisp的数据类型 Lisp有其它语言的一切类型,还提供另外其它语言没有两种类型: symbol(符号)和 list(表). (1)符号显示时总是被转换为大写.一般要使用 quote 来引用它 >'qwert QWERT (2)列表

common Lisp学习笔记(十二)

12 Structure and The Type Syetem 12.2 typep, type-of 12.3 defining structures 12.5 accessing, modifying structs 12.6 kwargs to constructor functions 12.7 修改结构体定义 12.8 print func for structs 12.9 equality of structs 12.10 inheritance 12 Structure and

common Lisp学习笔记(十三)

lisp_chapter13 13 Arrays, Hash Tables, and Proterty Lists 13.2 array 13.5 make-array 13.6 string as vectors 13.7 hash tables 13.8 priority list lisp toolkit: room 13.11 coerce 13 Arrays, Hash Tables, and Proterty Lists 13.2 array 数组是内存中的一些连续的存储空间,一维的

Common Lisp学习笔记(十一)

11 Iteration and Block Structure 11.2 dotimes and dolist 11.4 recursive, iterative 11.6 比较dolist, mapcar, recursion 11.7 DO macro 11.8 隐式赋值的好处 11.9 do* 11.11 implicit blocks lisp toolkit: time 11.13 optional args 11.14 rest args 11.15 keyword args 11

Common Lisp 学习笔记

特殊操作符.函数.宏 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=>美化输出(如字符串去引号.关键字去前导冒号),消

Common Lisp学习笔记(九)

9 Input/Output 9.2 string 9.3 format 9.4 read 9.5 yes-or-no-p 9.6 with-open-file 9.7 writing files with with-open-file 9.8 parameters to format directives 9.9 file EOF 9 Input/Output 9.2 string string在lisp中用双引号括起来,它的值也是自己本身,和数字一样,string不是symbols stri

Common Lisp学习笔记(六)

6 list data structure 首先注意cons的用法 (cons 'w '(x y z)) -> (w x y z) 但是想在list的结尾添加一个元素就不能这样实现,eg, (cons '(w x y) 'z) -> ((w x y) . z) 6.3 the APPEND function append函数可以参数是两个list,并将两个list的元素合并在一起,如果其中有一个是nil,则结果和另一个list相同 > (append '(a b) '(c d)) (a

Common Lisp学习笔记(七)

7 Applicative Programming 7.2 funcall 7.3 mapcar 7.4 manipulating tables with mapcar 7.5 lambda expressions 7.6 find-if 7.7 my-assoc 7.8 remove-if, remove-if-not 7.9 reduce 7.10 every debug tool: trace 7.11 operating on multiple lists 7.12 function函数

Gnu Emacs Lisp入门笔记

1.在Lisp中,数据和程序都是以同样的方式表示:它们都是由空格分隔 的.由括号括起来的单词.数字或者其他列表的列表.2.列表前面的单引号:表示不要对这个列表做任何操作,而仅仅是按其 原样.如果一个列表前没有引号,则第一个符号表示计算机要执行的命 令,用来对列表的其余部分进行操作. 3.对一个符号表达式求值几乎总是使Lisp解释器返回一个值,同时可能 产生一个附带效果,不然就产生一个错误消息.