使用SML中的成功延续查找满足f的BST中的所有元素

时间:2010-10-13 17:56:28

标签: tree sml continuations

我有一项任务要做,我无法弄清楚如何做一个问题。 这就是我要做的事情:

  

编写一个函数,它收集满足属性p的树T中的所有元素并将其返回。按顺序遍历树。   使用成功延续查找BST中满足f的所有元素。

我做了以下事情:

datatype 'a tree = 
Empty | Node of (int * 'a) * 'a tree * 'a tree

fun find_all f Empty  cont = cont()
| find_all f (Node(x, l, r))  cont = if (f x) then find_all (f l (fn x => x::cont())) @ find_all (f r (fn x => x::cont()))
         else find_all (f l (fn () => cont())) @ find_all (f r (fn () => cont()));

我不明白为什么它不起作用......

1 个答案:

答案 0 :(得分:2)

这是我做的:

fun find_all f Empty cont = cont []
| find_all f (Node(x, l, r)) cont = if (f x) then find_all f l (fn e => find_all f r (fn t => cont (e@(x::t))))
                      else find_all f l (fn t => find_all f r (fn e => cont (e@t)));

它工作正常