Я пытаюсь реализовать структуру данных trie в F #. У меня проблемы. Я не могу отладить функцию вставки слов. Ни одна из моих точек останова внутри этой функции не достигнута, что-то падает, но я не вижу никакой ошибки. Также у меня есть серьезные сомнения, правильно ли я реализовал это. В любом случае вот код:
type TrieNode =
| SubNodes of char * bool * TrieNode list
| Nil
member this.Char = match this with | Nil -> ' '
| SubNodes(c,weh,subnodes) -> c
member this.GetChild(c:char) = match this with | Nil -> []
| SubNodes(c,weh,subnodes) ->[ (List.filter(fun (this:TrieNode) -> this.Char = c) subnodes).Head ]
member this.AWordEndsHere = match this with | Nil -> false
| SubNodes(c,weh,subnodes) -> weh
module TrieFunctions =
let rec insertWord (wordChars:char list) = function
| Nil -> SubNodes(wordChars.Head, false, [])
| SubNodes(c, weh, subnodes) as node ->
let child = node.GetChild(wordChars.Head)
if child = [] then
SubNodes(wordChars.Head,false,[insertWord wordChars.Tail node])
else
SubNodes(wordChars.Head,false,[insertWord wordChars.Tail child.Head])
type Trie(inner : TrieNode) =
member this.InsertWord(wordChars:char list) = TrieFunctions.insertWord(wordChars)
let trie = Trie(SubNodes(' ',false,List.empty)).InsertWord(['g';'i';'g';'i'])
Итак, мои вопросы:
1. как я могу получить отладочный доступ к функции insertWord? Почему я не получаю его сейчас? Почему я не вижу ошибки?
2. Как заставить функцию вставки слова возвращать список объектов TrieNode, чтобы мне не приходилось заключать вызов в квадратные скобки ("[","]"). . Я думаю, что это ошибка.
3. Любые другие советы, которые вы можете дать мне по реализации этой структуры данных в F#, приветствуются. Я знаю, что, должно быть, делаю много вещей неправильно, так как я новичок в этом языке. Я знаю, например, что функция вставки слов несовершенна, потому что она не проверяет, пуст ли список или нет, поэтому он заканчивается преждевременно. Я хотел пересечь этот мост, когда доберусь до него.
заранее спасибо
заранее спасибо