1
想象一下,一個四叉樹定義如下:爲Quadtrees寫入太多模式匹配?
data (Eq a, Show a) => QT a = C a | Q (QT a) (QT a) (QT a) (QT a)
deriving (Eq, Show)
bad1 = Q u u u u where u = C 255
bad2 = Q (C 0) (C 255) (Q u u u u) (C 64) where u = C 255
構造函數允許您創建沒有很好地形成四叉樹。 bad1
應該是簡單的ç255和bad2
是無效的一點,因爲它的右下角四叉樹(出於同樣的原因,應該是Q (C 0) (C 255) (C 244) (C 64)
。
到目前爲止一切順利。檢查其良好的formness是一個簡單的檢查事項的。四叉樹內遞歸基本情況當所有內四叉樹的葉子,因此所有的顏色不應該是人人平等
wellformed :: (Eq a, Show a) => QT a -> Bool
wellformed (Q (C c1) (C c2) (C c3) (C c4)) = any (/= c1) [c2, c3, c4]
wellformed (Q (C c1) (C c2) se (C c4)) = valid se
-- continue defining patters to match e.g Q C C C, C Q Q C, and so on...
問題:我能避免鍵入所有比賽爲所有possi楓葉和四叉樹的組合?
如果我的問題很奇怪,請耐心等待,但這是我的第二天Haskell-seamless-learing!
根據您感興趣的內容,您可以創建一個「統一」功能,檢測所有四個元素相等並將其轉換爲單個元素的「壞」情況。 – 2011-02-04 06:18:58
@丹:當然,我已經做到了。我稱之爲「消毒」,並且與您所說的完全相同:P – gremo 2011-02-04 06:30:24