You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

两种写法的逻辑完全一致:

  1. number first 提取第一个元素的数值作为基准
  2. map number rest 将剩余所有Lan元素的number字段提取出来,得到一个Int类型的列表
  3. all (== number first) 判断上述Int列表的所有元素都等于基准值,满足返回True,否则返回False

内容的提问来源于stack exchange,提问作者Wouter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:24:04