【翻訳属性】另一个Scheme入门_09_I/O
commonlisp吧
全部回复
仅看楼主
level 13
nadesico19 楼主
1. 前言
到上一节为止,关于如何定义函数已经大致介绍完毕,读者应该能够在会话式环境中编写函数了。
在本节中将对I/O进行说明。能进行输入输出的程序可以具备相当的实用性。
2013年07月03日 02点07分 1
level 13
nadesico19 楼主
2. 读取文件
2.1. open-input-file, read-char, eof-object?
以读取模式打开文件时使用 (open-input-file filename) 。该函数返回一个读取用的端口。从端口中读取单个字符时使用 (read-char port) 。 read-char 在到达文件末尾时将返回 eof-object,因此使用 eof-object? 可以测试是否已到达文件末尾。关闭文件时使用 (close-input-port port) 。将文件内容作为字符串返回的函数可以按照如下方式编写。
[code 1]
例如,将下面 [hello.txt] 的内容保存为文件 (C:\doc\hello.txt) ,用上面代码读取将得到 [example 1] 所示结果。虽然换行符被表示为 '\r\n' 略显难看,但可以看出文件内容的确被正确读取。如 [example 2] 所示,使用输出用函数 display 则可以对显示文本整形。
[hello.txt]
[example 1]
[example 2]
2013年07月03日 02点07分 2
level 13
nadesico19 楼主
2.2. call-with-input-file, with-input-from-file
打开文件也可以使用 call-with-input-file、with-input-from-file 函数。由于可以处理出错情况,使用这两个函数或许更为方便。
(call-with-input-file filename procedure)
以读取模式打开 filename 文件。procedure 是以读取端口为参数的函数。由于读取端口可能在其他地方被再次使用,而 procedure 返回时文件并不会被自动关闭,因此有必要显示关闭文件。将 [code 1] 的 read-file 使用 call-with-input-file 改写,可得 [code 2]。
[code 2
(with-input-from-file filename procedure)
将 filename 作为标准输入打开。此时 procedure 为无参函数。当 procedure 返回时文件将被自动关闭。使用非常方便。将 [code 1] 的 read-file 使用 with-input-from-file 改写,可得 [code 3]。
[code 3]
2013年07月03日 02点07分 3
level 11
哇哦
2013年07月07日 14点07分 4
[晕]填坑
2013年07月09日 00点07分
level 8
距离上一篇快五个月了[捏脸]
2013年07月12日 01点07分 5
level 13
[真棒][真棒]
2013年08月11日 01点08分 7
[玫瑰]
2013年08月11日 07点08分
level 13
nadesico19 楼主
3. 写入文件
3.1. 写入用端口
与读取用端口相对应,scheme 中预置了以下函数。
(open-output-file filename)
以写入模式打开文件,返回写入用端口。
(close-output-port port)
关闭写入用端口。
(call-with-output-file filename procedure)
用写入模式打开 filename 并执行 procedure 。 procedure 是以端口为参数的函数。
(with-output-to-file filename procedure)
将 filename 作为标准输出打开,并执行 procedure 。 procedure 是无参函数。从 procedure 返回后文件将被关闭。
2013年08月12日 14点08分 9
level 13
nadesico19 楼主
3.1. 写入用函数
scheme中有以下用于写入的函数。这些函数在调用时如果省略 port 参数,内容将会被写入到标准输出中。
(write obj port)
将 obj 写入 port 中。字符串被双引号包围,字符以 #\ 形式被写入。
(display obj port)
将 obj 写入 port 中。字符串不被双引号包围,字符按原样被写入。
(newline port)
写入换行符。
(write-char char port)
将 char 写入 port 中。
2013年08月13日 12点08分 10
level 13
nadesico19 楼主
4. 结束
在Scheme中I/O部分只具备最低限度所需的函数,因此本节的说明也十分简单。通过到本节为止的介绍,一般性的程序已经可以使用Scheme来编写了。下一节将对代入进行解说。
2013年08月14日 13点08分 12
1