【发布时间】:2021-07-05 18:35:05
【问题描述】:
我目前正在从事一个项目,我正在逐行读取文件中的内容。我想在执行此操作之前检查文件是否可以打开或存在。类似于在 C++ 中检查 fopen() 的返回内容,但在 Scheme 中。
到目前为止,我有:
(define (perform action fileName . args)
(if (file-exists? fileName)
((define in-file (open-input-file fileName))
(do ((line (read-line in-file) (read-line in-file))) ((eof-object? line))
(display line)
(newline)))
(map display
(list "Unable to open " fileName " for reading\n"))
)
)
然而,所有这些代码都会逐行读取到文件中,并尝试检查文件是否存在。但是它不起作用,因为我收到“;无法在空语法环境中绑定名称:in-file #[reserved-name-item 13]”错误。
我意识到当文件无法打开时,会根据MIT Scheme Documentation 发出条件类型:文件操作错误类型的错误信号;但是,我无法弄清楚如何处理此异常,因此我的解决方法是。
任何帮助将不胜感激。
【问题讨论】:
-
你也可以简单地使用
(if (file-exists? fileName) ...) -
而且,
((define in-file (open-input-file fileName))周围还有额外的括号,而且,您只能将define放在顶层或正文的顶部。在开始尝试 I/O 操作之前,您需要了解 Scheme 的基础知识。 -
使用
let绑定局部变量,而不是define。
标签: file io scheme mit-scheme