File io 方案帮助-文件统计
所以我必须在Scheme中完成一个项目,我被卡住了。基本上,程序所做的就是打开一个文件并输出统计数据。现在我可以计算字符数,但我还需要计算行数和单词数。我现在只是想解决这个问题,但最终我还必须接受两个文件——第一个是文本文件,比如一本书。第二个是单词列表,我必须计算这些单词在第一个文件中出现的次数。显然,我将不得不与列表一起工作,但我希望能得到一些帮助。这是我到目前为止所拥有的代码(并且有效)File io 方案帮助-文件统计,file-io,scheme,File Io,Scheme,所以我必须在Scheme中完成一个项目,我被卡住了。基本上,程序所做的就是打开一个文件并输出统计数据。现在我可以计算字符数,但我还需要计算行数和单词数。我现在只是想解决这个问题,但最终我还必须接受两个文件——第一个是文本文件,比如一本书。第二个是单词列表,我必须计算这些单词在第一个文件中出现的次数。显然,我将不得不与列表一起工作,但我希望能得到一些帮助。这是我到目前为止所拥有的代码(并且有效) 使用Scheme的字数计算算法已在堆栈溢出中进行了说明,例如(向上滚动到页面顶部以查看C语言中的等效程
使用Scheme的字数计算算法已在堆栈溢出中进行了说明,例如(向上滚动到页面顶部以查看C语言中的等效程序):
该过程接收一个输入端口作为参数,因此可以将其应用于(比如)文件。请注意,对于计算单词和行,您需要测试当前字符是新行字符还是空白字符。并且需要一个额外的标志(代码中称为
状态
)来跟踪新词的开头/结尾。如何将文件“标记化”为一个行列表,其中一行是一个词列表,一个词是一个字符列表
(define (tokenize file)
(with-input-from-file file
(lambda ()
(let reading ((lines '()) (words '()) (chars '()))
(let ((char (read-char)))
(if (eof-object? char)
(reverse lines)
(case char
((#\newline) (reading (cons (reverse (cons (reverse chars) words)) lines) '() '()))
((#\space) (reading lines (cons (reverse chars) words) '()))
(else (reading lines words (cons char chars))))))))))
一旦你做到了这一点,剩下的就无关紧要了
> (tokenize "foo.data")
(((#\a #\b #\c) (#\d #\e #\f))
((#\1 #\2 #\3) (#\x #\y #\z)))
请提供可能的无“悬挂式”的副本;它们不是支架。
(define (tokenize file)
(with-input-from-file file
(lambda ()
(let reading ((lines '()) (words '()) (chars '()))
(let ((char (read-char)))
(if (eof-object? char)
(reverse lines)
(case char
((#\newline) (reading (cons (reverse (cons (reverse chars) words)) lines) '() '()))
((#\space) (reading lines (cons (reverse chars) words) '()))
(else (reading lines words (cons char chars))))))))))
> (tokenize "foo.data")
(((#\a #\b #\c) (#\d #\e #\f))
((#\1 #\2 #\3) (#\x #\y #\z)))