检测是否可以在 Scheme

问题描述

我目前正在处理一个项目,我正在逐行读取文件中的内容。在执行此操作之前,我想检查文件是否可以打开或存在。类似于在 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"))
    ) 
)

然而,所有这些代码都是在文件中逐行读取并尝试检查文件是否存在。但是它不起作用,因为我收到“;无法在空语法环境中绑定名称:文件内#[reserved-name-item 13]”错误。

我意识到当文件无法打开时,会根据 MIT Scheme Documentation 发出类型为 condition-type:file-operation-error 的错误信号;但是,我无法弄清楚如何处理此异常,因此我的解决方法是。

任何帮助将不胜感激。

解决方法

您的代码有一个问题。您不能在代码中随意添加括号来制作 if 的单个表达式,因为括号是函数调用。要制作单个表达式,您需要使用 begin:

(define (perform action fileName . args) 
    (if (file-exists? fileName)
        (begin
          (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"))
    )
)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...