在Haskell中通过构造函数对数据类型进行分组 [英] Grouping data types by constructor in Haskell

查看:117
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆