我想从一个文件中读取一些数字,将它们放入一个列表中,最后在屏幕上显示出来。
numbers.txt 目前有
2 3 5 7 11
,然而输出结果是11 7 5 3 2 - : unit = ()
。
为什么会这样呢?let rec int_list_from_sb sb n =
match n with
| 0 -> [];
| _ -> (bscanf sb " %d" (fun a -> a))::(int_list_from_sb sb (n - 1));;
let file_name = open_in "numbers.txt" in
let sb = Scanning.from_channel file_name in
let int_list = int_list_from_sb sb 5 in
List.iter (fun a -> print_int a) int_list;;
int_list_from_sb 4
被计算,从sb
中读取 4 个数字并返回[7; 5; 3; 2]
,然后bscanf sb " %d" (fun a -> a)
被计算并返回11
,接着11 :: [7; 5; 3; 2]
被计算并返回[11; 7; 5; 3; 2]
。 - sepp2ksb
是一个可变结构:想象一下如果两个表达式被依次评估会发生什么。 - Anton Trunov