Haskell中如何实现判断Lan列表所有元素number字段是否相等的函数
Haskell equalNumber 函数实现方案
核心前置说明
你定义记录类型时,Haskell会自动为每个字段生成同名的访问函数:
- 你这里的
number本身就是类型为Lan -> Int的函数,直接调用即可,不需要额外编写访问逻辑。
示例:如果有变量lanDemo = Lan "test" 5,调用number lanDemo就会返回5。
最终实现
实现逻辑非常简单:取列表第一个元素的number值作为基准,判断列表所有元素的number值都等于基准值即可。
equalNumber :: [Lan] -> Bool -- 空列表的返回值可根据业务需求调整,这里按通用约定返回True equalNumber [] = True equalNumber (first:rest) = all (\item -> number item == number first) rest
如果想用你之前想到的map函数写法,也可以写成如下等价形式:
equalNumber :: [Lan] -> Bool equalNumber [] = True equalNumber (first:rest) = all (== number first) (map number rest)
两种写法的逻辑完全一致:
number first提取第一个元素的数值作为基准map number rest将剩余所有Lan元素的number字段提取出来,得到一个Int类型的列表all (== number first)判断上述Int列表的所有元素都等于基准值,满足返回True,否则返回False
内容的提问来源于stack exchange,提问作者Wouter
相关产品推荐
相关产品推荐

