У меня есть этот код:
datatype 'a tree = Leaf of 'a | Node of 'a * 'a tree * 'a tree | Nil;
val rec tree_sum = fn(f,e,Nil) => e
| (f,e,Leaf(n)) => n
| (f,e,Node(node,right,left)) =>
f(node,tree_sum(f,e,right),tree_sum(f,e,left));
val binnum = Node(5,Leaf(4),Node(2,Leaf(1),Node(8,Nil,Nil)));
tree_sum((fn(a,b,c)=> a+b+c),0,binnum);
val it = 20 : int
Как я могу сделать ту же процедуру treesum
, когда у меня есть другой тип данных:
datatype 'a stree = Leaf of 'a | Brnch of 'a stree list;
treesum(fn(a, b) => a + b, 0, Brnch([Leaf 2, Brnch([Leaf 5, Leaf 3, Leaf 8])]));
val it = 18 : int
Я думаю, что мне нужно использовать карту ...
Я пытаюсь это, но есть 3 ошибки
val rec treesum =
fn (f,e,nil) => e
| (f,e,Leaf(n)) => n
| (f,e,Brnch(h::lst)) =>
f(treesum(f,e,h),treesum(f,e,lst));