W SML 3.12.1, List.map
opisana następująco:Dlaczego na liście List.map programu OCaml znajduje się zezwolenie?
let rec map f = function
[] -> []
| a::l -> let r = f a in r :: map f l
będę oczekiwać, że ostatni wiersz jest napisany jako | a::l -> f a :: map f l
, ale zamiast tego jest pozornie bezużyteczne let
wiążące. Czemu?
Rzeczywiście, każda wersja OCaml, którą wypróbowałem (do 4.00.1) wykazała następujące zachowanie: Zdefiniuj 'map' przez' let rec map f = function [] -> [] | x :: xs -> f x :: map f xs ;; 'a następnie wywołaj' map print_string ["a"; "b"; "c"] ;; '. Spowoduje to wypisanie elementów listy od prawej do lewej. – chris
Dlaczego konieczne jest określenie kolejności tutaj w List.map? Myślę, że "f a" oceniane przed lub po tutaj nie ma znaczenia, prawda? –