我是Haskell的新手,目前正在处理树。在这里,我想创建一个函数,将树中的元素交换,直到它变成一个maxheap。这样,我会使用Heapsort算法。maxheap函数解析错误
data Bintree a = E | Tree (Bintree a) a (Bintree a) deriving(Eq, Ord, Show)
swaptree:: Bintree Int -> Bintree Int
swaptree (Tree E w E) = (Tree E w E)
swaptree (Tree E w (Tree lr x rr))|((max w x)==w)=(Tree E w (Tree lr x rr))
|((max w x)==x)=(Tree E x(swaptree(Tree lr w rr)))
|otherwise error "something went wrong or program is bad"
swaptree (Tree (Tree ll v rl) w E)|((max v w)==w)=(Tree (Tree ll v rl) w E)
|((max v w)==v)=(Tree (swaptree(Tree ll w rl)) v E)
|otherwise error "something went wrong or program is bad"
swaptree (Tree (Tree ll v rl) w (Tree lr x rr))|((max3 v w x)==w) = (Tree (Tree ll v rl) w (Tree lr x rr))
|((max v x)==x)=(Tree (Tree ll v rl) x (swaptree(Tree lr w rr)))
|((max v x)==v)=(Tree(swaptree(Tree ll w rl)) v (Tree lr x rr))
|otherwise error "something went wrong or program is bad"
swaptree':: Bintree Int -> Bintree Int
swaptree' (Tree E w E) = (Tree E w E)
swaptree' (Tree lub w rub) = (swaptree(Tree(swaptree lub) w (swaptree rub)))
这就产生了我这个错误:
8:1: error:parse error (possibly incorrect indentation or mismatched brackets)
现在,我看它和阅读,这通常发生,leSt
使用没有in
,但因为我没有使用它,我有不知道如何解决这个问题。 我将不胜感激关于如何改进我的代码的任何帮助或提示! PS:请对我施以怜悯。正如我所说的,我现在对Haskell很不好。
您的解决方案好得多! –