- 论坛徽章:
- 0
|
前面的 preorder, inorder, 和 postorder 的确很简明,但效率是有问题的。问题出在 @ 上。 x @ y 要遍历 x,这本来是可以避免的。下面是改进后的版本,可读性略为降低。
- fun preorder (t)=
- let fun f (LEAF, vs) = vs
- | f (NODE(e,x,y), vs) = e::f (x, f (y, vs));
- in f (t, []) end;
- fun inorder (t)=
- let fun f (LEAF, vs) = vs
- | f (NODE(e,x,y), vs) = f(x, e:: f(y, vs));
- in f(t, []) end;
- fun postorder (t)=
- let fun f (LEAF, vs) = vs
- | f (NODE(e,x,y), vs) = f (x, f(y, e::vs));
- in f(t,[]) end;
复制代码
为提高效率,C 程序员通常要考虑一些硬件相关的,体系相关的问题,以榨取机器的全部潜能。Functional programming 的程序员通常在抽象层度更高一些的层次上来考虑问题,烦恼会少一些。但这并不等于函式编程不关心效率。函式编程的程序员可以通过算法提炼来提高效率。当然,让老板去买一台更强大的机器也是一个不错的选择。 |
|