Haskell 分数型是在哈斯克尔
我想在Haskell中使用有理数类型而不是派系类型(或者在C中使用float/double类型) 我得到以下结果:Haskell 分数型是在哈斯克尔,haskell,Haskell,我想在Haskell中使用有理数类型而不是派系类型(或者在C中使用float/double类型) 我得到以下结果: 8/(3-8/3)=23.999... 8/(3-8/3)/=24 我知道数据比率。但是,它支持对数据进行(+)(-)(*)(/)操作。比率: 1%3+3%3 == 4 % 3 8/(3-8%3) == 24 % 1 我已经登记了球拍: (= (/ 8 (- 3 (/ 8 3))) 24) #t 在Haskell中,确保8/(3-8/3)==24的正确方法是什么?并以简化形式
8/(3-8/3)=23.999...
8/(3-8/3)/=24
我知道数据比率。但是,它支持对数据进行(+)(-)(*)(/)操作。比率:
1%3+3%3 == 4 % 3
8/(3-8%3) == 24 % 1
我已经登记了球拍:
(= (/ 8 (- 3 (/ 8 3))) 24)
#t
在Haskell中,确保8/(3-8/3)==24的正确方法是什么?并以简化形式将分子返回比率的分母,以便安全地将分母与1进行比较,以检查比率是否为整数
import Data.Ratio
eq :: (Num a, Eq a) => Ratio a -> a -> Bool
eq r i = d == 1 && n == i
where
n = numerator r
d = denominator r
main = print $ (8/(3-8%3)) `eq` 24
在链中的某个位置使用显式类型。它将强制使用正确的类型执行整个计算
import Data.Ratio
main = do
print $ 8/(3-8/3) == 24
print $ 8/(3-8/3) == (24 :: Rational)
印刷品
False
True
是不是(数值a,等式a,比率a)=>a->a->Bool
?是一种数据类型,而不是类eq=(==)
也可以工作(给定正确的签名)。那么Haskell数值类层次结构中的“Rational”如何?大多数这类图片只是错过了理性类型。@liuyang1这些图片通常只显示标准的前奏类型和类别。Rational没有内置到编译器中,也不是前奏曲的一部分。它只是一个库类型。你可以自己定义一个(或多个),但我认为Rational
是前奏的一部分。运行ghci
时,只需使用前奏,:t(2/3::Rational)
,我们得到(2/3::Rational)::Rational
。即使没有导入数据,您的演示代码也会通过。比率是的,对不起,我的错误。在前奏曲中。不知道,那么Rational
实际上并不是一种独特的类型;它是比率整数
的别名。因为它是一个类型构造函数,而不是一个类型类,所以它不会出现在类层次结构中。