Haskell:基于成员类型的筛选器集?
假设我在Haskell中有以下数据结构来表示Checkers /绘图件:Haskell:基于成员类型的筛选器集?,haskell,set,subset,Haskell,Set,Subset,假设我在Haskell中有以下数据结构来表示Checkers /绘图件: data Piece = Reg {pos :: Square, color :: Color} | King {pos :: Square, color :: Color} deriving (Show, Eq) 给定这些片段的列表,我如何将国王从列表中分离出来?我一直在查看Data.Set的文档,但找不到对我来说显而易见的东西 简言之,我需要一个方法,该方法将在给定数据.Set集合的片段的情
data Piece = Reg {pos :: Square, color :: Color}
| King {pos :: Square, color :: Color}
deriving (Show, Eq)
给定这些片段的列表
,我如何将国王
从列表中分离出来?我一直在查看Data.Set
的文档,但找不到对我来说显而易见的东西
简言之,我需要一个方法,该方法将在给定
数据.Set
集合的片段
的情况下,返回所有King
类型片段的子集。我觉得这很简单,但我还没有遇到过,因为我对Haskell中的Data.Set类还不熟悉。您可以定义一个布尔函数isKing
,然后在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
为什么不做data-PieceType=Reg | King
和data-Piece=Piece{PieceType::PieceType,pos::Square,color::color}
?然后你可以只过滤该字段的值:过滤(==King).PieceType)
。显然,您希望为此导出Eq
,请参见isKing{}=True
以避免在字段数量发生变化时更改isKing
。