【发布时间】:2020-01-22 00:09:06
【问题描述】:
我对 Haskell 很陌生,我不确定如何解决/解决这个问题:我想要一个具有类型签名的函数:[((Double, Double), Bool)] -> [[(Double, Double)]]。如果Bool == True,该函数应仅将(Double, Double) 添加到列表列表中。如果 bool 为 False,我希望将与下一个 True bool 关联的 (Double, Double) 添加到新列表中。应将连续的 (Double, Double) 与 Bool == True 配对添加到同一列表中。例如,输入:[((1,1),True),((2,2), False),((3,3), False),((4,4),True),((5,5),True)] 应返回 [[(1,1)],[(4,4),(5,5)]]。我做了一些研究,似乎 groupBy 函数可能有助于解决问题,但我不太确定如何正确使用它。由于我是 Haskell 的新手,我更喜欢更简单的解决方案或解释,但任何建议都会有所帮助。
到目前为止,我的代码只是为与 True bool 关联的每个 (Double, Double) 创建了一个新列表。我不太确定如何添加到列表中的现有列表。
consecTrue :: [((Double, Double),Bool)] -> [[(Double,Double)]]
consecTrue xs = case xs of
[] -> []
x:xs
|snd x == True -> [fst x]:consecTrue xs
|snd x == False -> consecTrue xs
【问题讨论】:
-
这似乎是stackoverflow.com/q/58021470/625403 的一个奇怪的几乎重复。
-
@amalloy 是的。这几乎可以肯定意味着两者都是功课。
-
@amalloy 这当然是一个副本,但它的措辞要好得多,所以也许关闭另一个作为这个副本的副本?