私はデータ型trie=文字のノード*(trie ref)リストを持っています| 空そして私はこれらの2つの相互再帰関数を使用して、トライ内のすべての単語を収集したいと思います。
words_in_trie: trie -> (char list list -> 'a) -> 'a
all_words: trie ref list -> (char list list -> 'a) -> 'a
そして、楽しみながらそれらを呼び出します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)
私は何年もの間これに固執してきました、私はどんな助けにも感謝します。