Haskell N-Ary Trees
In the start of my work on CSSR, I have had to construct n-ary trees. Surprisingly, this took a lot or realization to get to, since most examples in haskell are showered with binary trees, so it’s easier to forget their n-ary variants. Furthermore, most n-ary implemintations that I’ve come across don’t seem to give nodes any value, except at the lowest level. Well, that last part may seem a little insane, but perhaps this was because a majority of my searching was on stackoverflow.
So, in generating a ParseTree
from Cosma’s Causal State Splitting Reconstruction
(CSSR) paper, I devised the following implementation which splits the root of the
tree from its branches. Each branch maintains a tuple with the first value as the
node’s weight. Just to start off, a parse tree only contains Char
values:
data ParseTree = Root [ParseTreeBranch] deriving Show
data ParseTreeBranch = Branch (Char, [ParseTreeBranch]) deriving Show
parseTree = Root [
Branch ('a', [
Branch ('b',[
Branch ('c',[]),
Branch ('a',[])
]),
Branch ('c',[
Branch ('c',[]),
Branch ('a',[])
])
]) ]
Filling a parse tree is a little more complex, and I will save that for a later date (once the implimentation is cleaned up a bit). Currently, this is really just a trie implimentation, but it should expand to take any type of sequence.