你好哈斯克尔社区,哈斯克尔 - 布尔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
的对应元素是否不为零。
我真的不知道从哪里开始像这样的问题......任何帮助将不胜感激。
我编辑了你的问题,希望问题现在在语法上有效。但我仍然没有看到玫瑰树与此有什么关系。 –