【问题标题】:Detect if file can be opened in Scheme检测文件是否可以在 Scheme 中打开
【发布时间】: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 发出条件类型:文件操作错误类型的错误信号;但是,我无法弄清楚如何处理此异常,因此我的解决方法是。

任何帮助将不胜感激。

【问题讨论】:

标签: file io scheme mit-scheme


【解决方案1】:

您的代码有一个问题。您不能在代码中随机添加括号来为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"))
    )
)

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2015-11-17
    • 2010-10-25
    • 2011-10-13
    • 2013-04-19
    相关资源
    最近更新 更多