在Haskell中通过构造函数对数据类型进行分组 [英] Grouping data types by constructor in Haskell
本文介绍了在Haskell中通过构造函数对数据类型进行分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
数据Val = X Int | Y布尔| Z双重派生(Eq,Show)
和一个列表如
let vals = [X 1,Z 2.7,Y True,X 2,Z 3.14,Y True]
如何将 vals
中的元素分组到此列表中,
[[X 1,X 2],[Y True,Y True],[Z 2.7,Z 3.14]]
解决方案我有以下内容:
数据Val = X Int | Y布尔| Z双重派生(Eq,Ord,Show)
vals :: [Val]
vals = [X 1,Z 2.7,Y True,X 2,Z 3.14,Y True]
valCtorEq :: Val - > Val - > Bool
valCtorEq(X_)(X_)= True
valCtorEq(Y_)(Y_)= True
valCtorEq(Z_)(Z_)= True
valCtorEq _ _ = False
然后:
* Main Data.List> groupBy valCtorEq $ sort vals
[[X 1,X 2],[Y True,Y True],[Z 2.7,Z 3.14]]
Given this data type
data Val = X Int | Y Bool | Z Double deriving (Eq, Show)
and a list such as
let vals = [X 1, Z 2.7, Y True, X 2, Z 3.14, Y True]
how to group elements in
vals
into this list,[[X 1,X 2],[Y True,Y True],[Z 2.7, Z 3.14]]
解决方案I've the following:
data Val = X Int | Y Bool | Z Double deriving (Eq, Ord, Show) vals :: [Val] vals = [X 1, Z 2.7, Y True, X 2, Z 3.14, Y True] valCtorEq :: Val -> Val -> Bool valCtorEq (X _) (X _) = True valCtorEq (Y _) (Y _) = True valCtorEq (Z _) (Z _) = True valCtorEq _ _ = False
And then:
*Main Data.List> groupBy valCtorEq $ sort vals [[X 1,X 2],[Y True,Y True],[Z 2.7,Z 3.14]]
这篇关于在Haskell中通过构造函数对数据类型进行分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文