编辑:忽略这个问题!请参阅下面的评论
我想要一个OCaml表达式,它传递一个文件(作为“in_channel”),然后逐行读取文件,进行一些处理,直到最后,然后返回处理结果。
我写了这个测试:
let rec sampler_string file string_so_far =
try
let line = input_line file in
let first_two_letters = String.sub line 0 2 in
sampler_string file (string_so_far ^ first_two_letters)
with End_of_file -> string_so_far;;
let a = sampler_string (open_in Sys.argv.(1)) "";;
(这里的“做一些处理”是将每行的前两个字符添加到一个连续的计数中,其想法是在末尾返回一个包含每行前两个字母的字符串。)
这不起作用:OCaml认为“sampler_string”产生的是unit类型的东西,而不是string类型的东西。(当我稍后尝试将结果用作字符串时,会出现困难。)我认为这个问题是因为唯一的基本情况发生在异常(End_of_file)中。
因此,一个具体问题和一个一般问题:
- Is there a way to fix this code, by explicitly telling OCaml to expect that the result of sampler_string should be a string?
- Is there some standard, better syntax for a routine which reads a file line by line to the end, and returns the result of line-by-line processing?