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

Haskell中normaliseRat函数类型不匹配错误求助

问题解决

错误核心

你遇到的报错本质是调用方式与函数定义不匹配:

  • normaliseRat的类型签名是Rat -> Rat,它仅接受一个Rat类型的参数。
  • 你直接传入两个整数6和9,相当于把单参数函数当成了双参数函数调用,编译器自然会抛出类型不匹配的错误。

修复方案

1. 修正调用写法

必须先构造Rat类型的值,再传入函数:

normaliseRat (Rat 6 9)

2. 完善规范化逻辑(推荐)

你的当前实现能处理正整数场景,但未处理符号问题(有理数规范化通常要求分母为正)。可以调整逻辑,把符号统一转移到分子上:

data Rat = Rat Integer Integer

normaliseRat :: Rat -> Rat
normaliseRat (Rat a b) = let g = gcd a b
                             sign = if b < 0 then -1 else 1
                         in Rat (sign * (a `div` g)) (sign * (b `div` g))

测试示例

在GHCi中验证效果:

> normaliseRat (Rat 6 9)
Rat 2 3
> normaliseRat (Rat (-6) 9)
Rat (-2) 3
> normaliseRat (Rat 6 (-9))
Rat (-2) 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:55:31