Я не понимаю следующий код:
type 'a b_tree = Empty | Node of 'a*'a b_tree*'a b_tree
let add_trees_with left right all =
let add_right_tree all l =
List.fold_left (fun a r -> Node('x', l, r) :: a) all right in
List.fold_left add_right_tree all left
Я не понимаю, что будет после части in
. List.fold_left
нужно иметь три аргумента, тогда как после in
мы даем только один аргумент List.fold_left
, который равен add_right_tree all left
.
Итак, как этот код компилируется?
Разве это не должно быть?
type 'a b_tree = Empty | Node of 'a*'a b_tree*'a b_tree
let add_trees_with left right all =
let add_right_tree all l =
List.fold_left (fun a r -> Node('x', l, r) :: a) all right in
add_right_tree all left