Haskell中如何统计自定义数据类型内列表的元素数量
解决Haskell自定义数据类型的列表元素统计问题
嘿,这问题挺直接的,我来一步步给你讲清楚怎么实现~
首先先看你定义的自定义数据类型:
data b = b Int Int Int [b] deriving (Eq)
这里要提个小建议:虽然Haskell允许类型变量和构造函数同名(都是b),但实际写代码的时候建议把类型和构造函数改成首字母大写的名字(比如MyData),这样可读性会高很多,避免混淆。不过先按你给出的定义来实现函数。
我们需要实现的kk函数,核心就是取出数据类型里的列表字段,然后计算它的长度。用Haskell的模式匹配就能轻松搞定:
kk :: b -> Int kk (b _ _ _ xs) = length xs
代码解释:
kk (b _ _ _ xs):这里用模式匹配把构造函数b的四个参数拆解开,前三个Int类型的参数我们不需要用到,所以用_来忽略;最后一个xs就是我们要统计的[b]列表。length xs:调用Haskell内置的length函数,直接返回列表的元素数量。
比如你给出的示例:
a = b 3 4 5 [b1, b2, b3] -- 这里假设b1、b2、b3都是b类型的实例
调用kk a就会返回length [b1, b2, b3],也就是3,完全符合你的要求。
如果改成更清晰的命名方式,代码会变成这样:
data MyData = MyData Int Int Int [MyData] deriving (Eq) kk :: MyData -> Int kk (MyData _ _ _ xs) = length xs
这样别人看代码的时候一眼就能明白各个部分的含义啦~
内容的提问来源于stack exchange,提问作者yam
相关产品推荐
相关产品推荐

