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

Haskell如何生成首元素为整数、次元素为浮点数的二元组(tuple)?

问题根源

问题出在Haskell的类型推导规则和/运算符的类型约束上:

  • /运算符的类型为Fractional a => a -> a -> a,要求两个运算数和返回值都属于Fractional类型类,整数类型不属于这个类型类
  • 你原来的写法1 / x会触发类型推导自动把x的类型统一为Fractional(比如Double),所以二元组第一个位置的x也被隐式转换为浮点数了

解决方案

只需要在做除法的位置单独把x转换为Fractional类型即可,用标准库的fromIntegral函数处理参与运算的x,外层作为二元组第一个元素的x可以保留原整数类型:

f2 n = [(x, 1 / fromIntegral x) | x <- [1 .. n]]

你也可以手动加上类型签名让类型更明确,避免后续使用时出现类型歧义:

f2 :: Int -> [(Int, Double)]
f2 n = [(x, 1 / fromIntegral x) | x <- [1 .. n]]

测试效果

执行f2 5就能得到你预期的输出:

[(1,1.0),(2,0.5),(3,0.3333333333333333),(4,0.25),(5,0.2)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:08