R5RS - 如何测试使用“读取”操作的程序

R5RS - How to test procedures that use `read` operation

是否可以测试使用 read 操作的程序?

例如

(define (foo prompt)
  (display prompt)
  (read))

我尝试使用 write,但 read 似乎创建了一个块,因此 write 在我手动输入内容后仅 运行

当您在代码中调用内部 read 时,该调用不会从标准输入而是从您的文件本身读取,因为 reader 将输入文件转换为列表s-exps 将使用相同的读取功能。所以,是的,如果你重新定义它就可以使用它,否则结果更难预料。这是 read.scm 的示例:

(define (foo m)
  (display m)
  (read))

(display (foo "input:"))

200

(newline)

使用示例:

% mit-scheme --silent < read.scm
input:200

函数调用将读取值200,它不会在表示代码的最终列表中返回。

要定义您自己的 read-keyboard 功能,您可以将其作为模型 this