检测文件是否可以在 Scheme 中打开
Detect if file can be opened in Scheme
我目前正在进行一个项目,我正在逐行读取文件中的内容。在执行此操作之前,我想检查文件是否可以打开或存在。类似于在 C++ 中检查 fopen() 的 return 内容,但在 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 发出条件类型:文件操作错误类型的错误信号;但是,我无法弄清楚如何处理此异常,因此我的解决方法。
如有任何帮助,我们将不胜感激。
您的代码有一个问题。您不能在代码中随意添加括号来为 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"))
)
)
我目前正在进行一个项目,我正在逐行读取文件中的内容。在执行此操作之前,我想检查文件是否可以打开或存在。类似于在 C++ 中检查 fopen() 的 return 内容,但在 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 发出条件类型:文件操作错误类型的错误信号;但是,我无法弄清楚如何处理此异常,因此我的解决方法。
如有任何帮助,我们将不胜感激。
您的代码有一个问题。您不能在代码中随意添加括号来为 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"))
)
)