我不理解以下代码:
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
答案 0 :(得分:0)
在这一行
List.fold_left add_right_tree all left
函数List.fold_left
有三个参数。函数调用保持关联性,因此带括号的版本应为:
((List.fold_left add_right_tree) all) left
因为List.fold_left以咖喱形式定义,所以这正是传递三个参数的方式。
括号不是 如下:
List.fold_left ((add_right_tree all) left) (* NOT SO *)
请注意,这种解释甚至不一致。它既不是左联想也不是右联想。但这是您所假设的解释。