Racket 当#<;eof>;列表中
我有一些代码可以读取文件并将其转换为字符列表Racket 当#<;eof>;列表中,racket,eof,Racket,Eof,我有一些代码可以读取文件并将其转换为字符列表 (define in (open-input-file "some-file.txt")) (define (file->char-list inp) ;; convert the input file into a list of chars (let ([content (read-char inp)]) (if (eof-object? content) (list eof) (cons content
(define in (open-input-file "some-file.txt"))
(define (file->char-list inp)
;; convert the input file into a list of chars
(let ([content (read-char inp)])
(if (eof-object? content)
(list eof)
(cons content (file->char-list inp)))))
(define char-list (file->char-list in)
(println char-list)
read-syntax: bad syntax `#<`
'(#\s #\o #\m #\e #\space #\t #\e #\x #\t #<eof>)
(在(打开输入文件“some file.txt”)中定义)
(定义(文件->字符列表inp)
;将输入文件转换为字符列表
(let([内容(读取字符inp)])
(如果(eof对象?内容)
(列表eof)
(cons内容(文件->字符列表inp‘‘‘‘)’)
(定义字符列表(文件->中的字符列表)
(println字符列表)
读取语法:错误语法“#在典型的现代操作系统上,文件中没有文件结尾字符。相反,当某个文件I/O操作到达文件结尾时,操作系统会发出信号。为了使此信号有效,必须向I/O操作的调用者返回一个唯一的值,该值可以与可能接收到的任何有效数据。对于Racket,此值为,这是一个表示文件结尾的不同值
>代码> EOF对象被打印为AN;您不希望读者在程序中间遇到文件末尾。当您在RePL中输入<代码> EOF时,符号<代码> EOF>代码将计算到文件对象的末尾,该文件通常会被打印为不可读取的值,使用<代码> > <代码>。o读者,比如说,通过将其包含在带有
”(#s#o#m#e#e#space#t#e#x#t#
)的引用列表中,读者会抱怨。这是应该的
我想不出OP需要处理eof
对象的任何原因,该对象在到达文件末尾时已返回。OP也可以执行以下操作:
(define (file->char-list inp)
;; convert the input file into a list of chars
(let ([content (read-char inp)])
(if (eof-object? content)
'()
(cons content (file->char-list inp)))))
使用由以下人员创建的列表时:
(define char-list (file->char-list in))
char-list ==> '(#\s #\o #\m #\e #\space #\t #\e #\x #\t)
已知在到达列表末尾时已到达文件结尾。如果OP要“转换”eof
在某种程度上,一个新字符可以简单地添加到列表的末尾。您上面粘贴的代码对我来说很有用。您是否对可能产生错误的结果做了任何其他操作?我正在尝试为我正在处理的项目标记html元素。在html规范中,eof的处理方式不同y取决于遇到eof时lexer所处的状态。我以前从未处理过不可读的值。在此之前,我从未处理过这些值。但现在我知道#不是我可以直接处理的值,我将使用“()”作为代理。我感谢您的解释!