代码之家  ›  专栏  ›  技术社区  ›  Bill

haskell中的模式匹配序列

  •  15
  • Bill  · 技术社区  · 16 年前

    图案匹配是哈斯克尔最优雅的特征之一。

    我最近在做一个项目,我需要一个队列数据结构,所以我使用data.sequence。不过,看起来我不得不放弃图案搭配的优雅,转而求助于警卫:

    floodFillWorker :: Image -> RGBAColor -> Double -> PixelQueue -> Image
    floodFillWorker image base tolerance queue 
        | Seq.null queue = image
        | otherwise      = doSomeWork image
    

    我可以使用与序列匹配的模式,还是需要使用防护?

    2 回复  |  直到 16 年前
        1
  •  17
  •   svenningsson ahmed mohamady    16 年前

    麻黄是在正确的轨道上与视图模式,但我认为有一种方法,这实际上是相当不错的。 Data.Sequence 实际上是在考虑视图的情况下编写的,您应该使用 ViewL 或 ViewR 类型以便在数据结构上进行模式匹配。

    {-# LANGUAGE ViewPatterns #-}
    
    floodFillWorker image _ _ (Seq.viewl -> EmptyL) = image
    floodFillWorker image base tolerance queue = doSomeWork image
    
        2
  •  6
  •   ephemient    16 年前

    你 能够 使用 view patterns 而不是警卫,但事实上没有更好的(我的)。卫兵看起来很好…

    {-# LANGUAGE ViewPatterns #-}
    
    floodFillWorker image _ _ (Seq.null -> True) = image
    floodFillWorker image base tolerance queue = doSomeWork image
    
    推荐文章