ANSI Common Lisp译本笔记6

输入输出

common lisp有两种流:字符流、二进制流

字符流

流是用来表示字符来源与或终点的lisp对象。

输入缺省是从*standard-input*流读取,输出缺省是在*standard-output*流。最初会在相同的地方:一个表示顶层的流。

一个路径名是一种可携的方式来指定一个文件。
一个路径名有6个部分:host、device、directory、name、type、及version。
可通过make-pathname搭配一个或多个对应的关键字参数来产生一个路径。最简单的,只指明名字,其他为缺省。

如:(setf path (make-pathname :name "testfile"))


open:打开一个文件。第一个参数为路径名(文件名),后面参数为选择性关键字参数。打开成功返回一个指向文件的流

其中,关键字参数direction的数值为:input(读)、:output(写)、:io(读写)
关键字参数if-exists说明文件存在的动作,若值为:supercede表示覆盖。
如:(setf str (open path :direction :output
:if-exists :supercede))
(format str "test file~%")

当使用open打开一个文件操作完之后要使用close关闭

with-open-file:第一个参数是列表,即:变量名 文件路径名 open参数。第二个参数:为一个代码主体,用于操作文件的动作,操作完成之后自动关闭文件。
输入
read-line:读入换行符之前的所有字符,并用字符串返回它们。接受一个选择性流,缺省为*standard-input*
一般,read-line接受四个选择性参数:一个流,一个参数用来决定遇到end-of-file时,是否产生错误。若前一个参数为nil,该返回什么,第四个参数通常省略。

read:在一个表达式之后,停止处理字符串,留下剩余的字符给之后读取这个流的处理函数。

输出
三个输出函数: prinl、princ、terpri。最后一个参数为选择性的流参数,缺省为*standard-output*

prinl与princ区别:prinl是给程序产生输出,princ是给人类产生输出。
trepri:仅打印一行。


format:一个通用的输出函数。一个流或nil、一个格式化字符串、一个或多个额外参数。
格式化字符串可以包含特定的格式化指令,这些指令前有波浪号~。
若第一个参数为t,则被输出到*standard-output*。若为nil,则会返回一个它会如何打印出的字符串。
~A:表示一个占位符。
~%:表示为换行。
~S:使用prinl打印对象。
~F:打印向右对齐的浮点数。接受五个参数:
1.要打印的字符总数,缺省为数字的长度。
2.小数后几位,缺省为全部
3.小数左移几位(等同于将数字乘10),缺省不移动。
4.数字太长无法满足第一个参数时,所要打印的字符,若不指定,一个过长的数字会在尽可能是使用它所需要的空间被打印出来。
5.数字开始打印之前左边的字符。缺省为空白。
如:(format nil "~10,2,0,'*' F" 26.45613)→26.45
其中,10表示字符总数,2表示保留小数点后2位,0表示左移0位,*表示当超过是个字符时,超过的表示为*
当忽略参数时,则可以直接写逗号,也可以忽略逗号。

注意:当format取整数时,不保证会进位或舍去。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值