让我们说我在Haskell中有以下数据结构来表示Checkers /稿件:
data Piece = Reg {pos :: Square, color :: Color}
| King {pos :: Square, color :: Color}
deriving (Show, Eq)
鉴于这些Pieces
的列表,我如何从列表中隔离King
?我一直在http://www.haskell.org/ghc/docs/7.6.2/html/libraries/containers-0.5.0.0/Data-Set.html查看Data.Set
的文档,但无法找到对我来说显而易见的内容。
简而言之,我需要一种方法,在给定Data.Set
Piece
集的情况下,返回所有King
类型片段的子集。我觉得它很简单,但我还没有遇到过,因为我是Haskell中Data.Set类的新手。
答案 0 :(得分:5)
您可以定义布尔函数isKing
,然后在filter
中使用Data.Set
,如下所示:
import Data.Set as S
data Color = Int deriving (Show, Eq)
data Square = Square (Int,Int) deriving (Show, Eq)
data Piece = Reg {pos :: Square, color :: Color}
| King {pos :: Square, color :: Color}
deriving (Show, Eq)
isKing King{} = True
isKing _ = False
getKings s = S.filter isKing s