需要中文版《The Scheme Programming Language》的朋友可以在此留言(内附一小段译文)...

  首先给出原著的链接:http://www.scheme.com/tspl4/

  我正在持续翻译这本书,大概每天都会翻译两小时。若我个人拿不准的地方,我会附上原文,防止误导;还有些不适合翻译的术语,我会特意不翻译。

  想看翻译的人,可以在下面留言。发这篇博文,就是为了看看有多少人需要,我的翻译有没有公开的价值。

  若真有人需要,我可以把翻译不断分享给大家~


  在此先给出一小段译文,分享给大家。

  本段译文只在排版上于原著每段中加了些换行,别的均与原著保持了一致。


Chapter 7. 输入和输出 

  所有的输入和输出操作都经由 端口 执行。
  端口就是(可能是无限大的)数据流的指针,这数据常为一个文件。
  流是一个通路,可供程序存取字节或字符。
  端口类型有:输入端口、输出端口、双向端口。

  端口是一等对象,和Scheme中的其他对象一样。
  端口没有供打印的表示方法(原文是have a printed representation)。
  有三个内置的端口:通用输入端口、通用输出端口、通用错误端口,
  分别连接到进程的:标准输入、标准输出、标准错误流。
  语言本身提供了很多种打开新的端口的方法。

  输入端口往往指向有限的流,例如存储在硬盘上的输入文件。
  如果一个输入操作(例如:get-u8get-charget-datum)从一个已达有限流末尾的端口读取,
  则会返回一个特殊的 eof (end of file) 对象
  谓词 eof-object? 可以用来判断输入操作的返回值是否是eof对象。

  端口类型有binarytextual
  binary端口允许程序于流中读写8-bit无符号字节、"octets,"。
  textual端口允许程序读写字符。

  很多时候,流被组织成字节序列, 但这些字节其实是字符的编码。
  此时,可以借助transcoder创建textual端口,从而在输入时将字节解码成字符、在输出时将字符编码成字节。
  transcoder内封装了codec,它确定了字符如何表示成字节。
  有三个标准的codec:latin-1 codec, Unicode utf-8 codec, Unicode utf-16 codec。
  在 latin-1 中,每个字符用一个字节表示。
  在 utf-8 中,每个字符用一到四个字节表示。
  在 utf-16 中,每个字符用两个或四个字节表示。

  transcoder内还封装了eol style,用来确定 识别哪种 以及 如何识别 行尾标志。
  如果 eol style 是 none,那么不识别任何一种行尾标志。
  另外六个标准 eol styles 如下所示:

lfline-feed 换行字符
crcarriage-return 回车字符
nelUnicode next-line C-n字符
lsUnicode line-separator 行分割字符
crlf换行字符+回车字符
crnelC-n字符+回车字符

  不同的 eol style 下,输入输出操作也会不同。
  输入时,除 none 之外的所有 eol style 下,均会将 各种行尾标志 转换为 单换行字符。
  输出时,除 none 之外的所有 eol style 下,均会将 换行字符 转换为 各自风格的行尾标志。
  在输入方向,除 none 之外的所有 eol style 都是等价的;
  而在输出方向,则只有 none 和 lf 是等价的。

  除了 codec 和 eol style,transcoder内只还封装了一块信息:error-handling模式, 确定了当编码解码错误出现时,会如何处理。
  例如,在输入方向上,用封装的 codec 无法将一个字节序列转换成字符;
  或者,在输出方向上,用封装的 codec 无法将一个字符转换成字节序列。
  error-handling模式有:ignoreraisereplace
  在 ignore 模式下,出错的字节序列或字符会被忽略。
  在 raise 模式下,会抛出一个异常,类型是:i/o-decoding 或 i/o-encoding
  在输入方向,端口定位到字节序列之后。
  在 replace 模式下,会产生一个替换的字符或字符编码:
  在输入方向,替换字符是 U+FFFD,
  而在输出方向,替换字符则如下:
  当 codec 为 utf-8 或 utf-16 时,替换字符是 U+FFFD;
  当 codec 为 latin-1 时,替换字符则是 问号字符 ( ? )。

  为了效率,端口会有缓存机制, 从而消除向操作系统逐字节或字符取用的开销。
  标准的buffer模式有三个:blocklinenone
  在block模式下,将输入输出流分成很多块分别操作,每块流的大小与实现相关。
  在line模式下,缓存将构建成一行一行的,或者是实现相关的大小。
  上面这两种模式,仅在 textual输出端口 中有明显区别;
  因为 binary端口 中并不分行,而 输入 则往往在流开始可读时便直接读取了。
  在none模式下,没有缓存,因此会直接输出到流中,也仅在需要时才去输入。

  本章余下的内容有:
  transcoder上的操作、
  文件端口、标准端口、字符串和字节向量端口、自定义端口(custom ports)、
  通用端口操作、输入操作、输出操作、
  方便的输入输出、文件系统操作、字节向量和字符串的相互转换。

 

转载于:https://www.cnblogs.com/icedream61/p/5207009.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language. The fourth edition has been substantially revised and expanded to bring the content up to date with the current Scheme standard, the Revised6 Report on Scheme. All parts of the book were updated and three new chapters were added, covering the language's new library, exception handling, and record-definition features. The book offers three chapters of introductory material with numerous examples, eight chapters of reference material, and one chapter of extended examples and additional exercises. All of the examples can be entered directly from the keyboard into an interactive Scheme session. Answers to many of the exercises, a complete formal syntax of Scheme, and a summary of forms and procedures are provided in appendixes. The Scheme Programming Language is the only book available that serves both as an introductory text in a variety of courses and as an essential reference for Scheme programmers.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值