我是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很不好。
您的解決方案好得多! –