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
相关产品推荐
相关产品推荐

