你好哈斯克爾社區,哈斯克爾 - 布爾RoseTree
由於玫瑰樹的通常的定義:
RoseTree a = Node a [RoseTree a]
我一直在抓我的頭在這個特定功能的實現:
boolRoseTree :: Blocks -> Blocks -> RoseTree a -> Bool
boolRoseTree blocksA blocksB roseTree
其中Blocks
只是一個[Int]
,它總是包含6個大於或等於0的元素。 現在函數我希望實施檢查blocksA
的某個元素是否爲某個值,並且blocksB
的某個元素也是某個值,並且如果條件滿足,則返回True
。這是非常模糊的,所以允許我用一個例子闡明:
| (blocksA !! 0 == 1 || blocksA !! 0 == 10) && blocksB !! 1 /= 0 = True
即如果的blocksA
所述第一元素是1
或10
和blocksB
所述第二元件不0
,然後返回True
。我希望對blocksA
的所有元素都這樣做,但是每次元素增加+1
。通過我的意思是下一個警衛將是:
| (blocksA !! 1 == 2 || blocksA !! 1 == 11) && blocksB !! 2 /= 0 = True
| (blocksA !! 2 == 3 || blocksA !! 2 == 12) && blocksB !! 3 /= 0 = True
| (blocksA !! 3 == 4 || blocksA !! 3 == 13) && blocksB !! 4 /= 0 = True
| (blocksA !! 4 == 5 || blocksA !! 4 == 14) && blocksB !! 5 /= 0 = True
很顯然,我可以警衛一長串代碼本,通過所有blocksA !! 0
,blocksA !! 1
,blocksA !! 2
,blocksA !! 3
,blocksA !! 4
,blocksA !! 5
最終達到一個otherwise
聲明往哪個返回False
。然而,這可以通過玫瑰樹更有效地實現(我認爲)。
我想在玫瑰樹的第一層必須有六個節點,0到5代表樹的元素。然後,每個節點都必須有2個值,這兩個值是我想要的blocksA
在列表的特定元素處的兩個值 - 但是,我也不得不檢查blocksB
的對應元素是否不爲零。
我真的不知道從哪裏開始像這樣的問題......任何幫助將不勝感激。
我編輯了你的問題,希望問題現在在語法上有效。但我仍然沒有看到玫瑰樹與此有什麼關係。 –