Chcę odczytać niektóre numery z pliku, przenieść je do listy i wyświetlić je na ekranie. numbers.txt ma obecnie numer 2 3 5 7 11
, jednak jako wynik uzyskuję 11 7 5 3 2 - : unit =()
funkcja zwraca listę w odwrotnej kolejności w OCaml
Dlaczego tak się dzieje?
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;;
jeśli wybierze drugą funkcję Tutaj rekurencyjną jeden, co dzieje się z całkowitą że bscanf uzyskanego? –
@power_output Co się dzieje, że 'int_list_from_sb 4' ocenia, czytając 4 numery z' sb' i zwracając '[7; 5; 3; 2] ', następnie' bscanf sb "% d" (fun a -> a) 'ocenia i zwraca' 11', a następnie '11 :: [7; 5; 3; 2] 'jest obliczane i zwraca' [11; 7; 5; 3; 2] '. – sepp2k
@power_output Masz szczęście, ponieważ system właśnie odłożył skanowanie w przewidywalny sposób. Wyniki mogą (* w zasadzie *) być jeszcze bardziej interesujące, ponieważ 'sb' jest zmienną strukturą: wyobraź sobie, co by się stało, gdyby oba wyrażenia zostały ocenione, na przykład, z kolei. –