我有一个数据类型 trie = char 的节点 * (trie ref) list | Empty 我想收集 trie 中的所有单词,使用这两个相互递归的函数:
words_in_trie: trie -> (char list list -> 'a) -> 'a
all_words: trie ref list -> (char list list -> 'a) -> 'a
然后用 fun all_entries t = all_words t (fn l => map (fn w => String.implode w) l) 调用它们;
这必须通过延续来完成。我以非延续形式写了它,如下所示:
fun wt Empty = [[]]
|wt (Node(c,rl)) = map (fn (l) => c::l) (aw rl)
and aw [] = []
|aw [h] = wt (!h)
|aw (h::t) = (wt (!h))@(aw t)
但我不知道如何将它们转换为延续形式!这是我到目前为止所拥有的,但它不起作用:
fun words_in_trie Empty cont = cont[]
|words_in_trie (Node(c,rl)) cont = (all_words rl (fn r=> cont(c::r)))
and all_words [h] cont = words_in_trie (!h) cont
|all_words (h::t) cont = (words_in_trie (!h) cont)@(all_words t cont)
我已经坚持了很长时间,我将不胜感激。