Найти все элементы в BST, удовлетворяющие f, используя продолжения успеха в SML - PullRequest
3 голосов
/ 13 октября 2010

У меня есть задание, и я не могу понять, как сделать один вопрос. Вот что я должен сделать:

Напишите функцию, которая собирает все элементы в дереве T, которая удовлетворяет свойству p и возвращает его. Пройдите через дерево в порядке. Найти все элементы в 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 Ответ

2 голосов
/ 15 октября 2010

Вот что я сделал:

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)));

И это прекрасно работает

...