我有一個 數據類型trie = Node * char *(trie ref)list |空 我想收集線索的所有單詞,使用這兩個相互遞歸函數:SML - 使用continuation收集trie中的單詞
words_in_trie: trie -> (char list list -> 'a) -> 'a
all_words: trie ref list -> (char list list -> 'a) -> 'a
,然後用 樂趣all_entries T = all_words噸(FN L電話他們=>地圖(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)
我已經被困在了好久了,我會感謝任何幫助。
標準ML *本身*沒有延續。您是否使用[新澤西州的SMLofNJ.Cont結構的標準ML](http://www.smlnj.org/doc/SMLofNJ/pages/cont.html)或其他地方的類似模塊, ? – ruakh 2012-02-25 16:01:57
使用的延續是一個函數(炭名單列表 - >「a)在作爲輸入列表表示單詞的後綴的列表它收集迄今 – Lanaru 2012-02-25 16:11:15