Haskell N元树构造

Haskell N元树构造,haskell,recursion,syntax,tree,Haskell,Recursion,Syntax,Tree,我是哈斯克尔的新手。我试图学习在Haskell中实现N元树。我试图构造N元树,因此我创建了自己的数据类型 data Tree = Empty | Node Integer [Tree] deriving Show 我想从列表中构造我的树。我想构造这样的树,它将一个接一个地获取列表元素。如果元素更小,它将是前一个元素的子树,否则它将是同级的。我的问题在基本情况和递归部分。所以我写了这样一个代码: arrin :: [Integer] -> Integer ->

我是哈斯克尔的新手。我试图学习在Haskell中实现N元树。我试图构造N元树,因此我创建了自己的数据类型

      data Tree = Empty | Node Integer [Tree] deriving Show
我想从列表中构造我的树。我想构造这样的树,它将一个接一个地获取列表元素。如果元素更小,它将是前一个元素的子树,否则它将是同级的。我的问题在基本情况和递归部分。所以我写了这样一个代码:

      arrin :: [Integer] -> Integer -> Integer {-this function takes an array -}
      arrin (x:xs) i                           {- and indexs and return the element-}  
        | i == 0    = x                    {-of that array which on that index -}
        | otherwise = arrin xs (i-1)  


      listToTree :: Integer -> [Integer] -> Tree
      listToTree _ [] = Empty {-First Input will be zero initially-}
      listToTree 11 _ = Empty {-Lets assume that the lenght of my list is 10-}
      listToTree 0 a = Node ( arrin a 0 ) [listToTree 1 a]
      listToTree num a  {-I need your help in this part what should i do-}
          | arrin a num > arrin a (num+1) = Node ( arrin a num ) [listToTree (num+1) a]
          | otherwise = Node ( arrin a num ) [Empty]

任何类型的注释和答案都将不胜感激。

为什么您的函数将整数作为第一个参数?此外,还不清楚树是否应以“Node int[]”或“Node int empty”结尾。如果您已经准备好接受[Tree]作为输出,那么您甚至不需要空列表,这可能只是空列表真正需要的。在这种情况下,函数可以如下所示

listToTree :: [Integer] -> [Tree]
listToTree [] = []
listToTree [x] = [Node x []]
listToTree (x1:x2:xs)
    | x2 < x1 = [Node x1 (listToTree (x2:xs))] -- subtree
    | otherwise = Node x1 [] : listToTree (x2:xs) -- sibling
listToTree::[Integer]->[Tree]
listToTree[]=[]
listToTree[x]=[Node x[]
列表树(x1:x2:xs)
|x2
问题具体是什么?代码应该做什么,它当前正在做什么,这与预期有什么不同?此代码不接受它在遇到的第一个空列表中停止的列表的所有元素,我知道我的问题在哪里,实际上我需要的是一个算法。所以我不能创建整个树,仍然很难理解这个函数应该做什么。您能给出一个示例输入和期望输出以及实际输出吗?输入:listToTree 0[3,2,9,8,4,5,0,1,6,7]期望输出节点3[节点2[空]、节点9[节点8[节点4]、节点5[节点0]、节点1[空]、节点6[空]、节点7[空]]我的输出节点3[Node 2[Empty]]正如我所说,它在第一个空节点中停止