I am trying to implement a trie data structure in F #. I have a problem's. I cannot debug the word insert function. None of my breakpoints inside this function reached something, but I don't see any error. I also have serious doubts if I have implemented this correctly. Anyway, here is the code:
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'])
So my questions are:
1. How can I get debug access to the insertWord function? Why am I not getting it now? Why can't I see the error?
2. How to make the insert word function return a list of TrieNode objects so that I donβt have to wrap the call around square brackets ("[", "]"). I think this is a mistake.
3. Any other advice you can give me about implementing this data structure in F # is welcome. I know that I have to do a lot of things because I am very new to this language. I know, for example, that the word insertion function is erroneous because it does not check if the list is empty or not, so it ends prematurely. I wanted to cross this bridge when I got to it.
Thank you in advance
Thank you in advance
source share