请教一个类型转化的问题,麻烦看看代码,短的。

发布于 2022-08-13 13:15:56 字数 542 浏览 16 评论 4

  1. type Fraction = (Integer,Integer )
  2. ratfloat :: Fraction -> Float   -- convert to floating numbers
  3. ratfloat  (a,b) = a/b

复制代码

我的hugs显示出错信息是
ERROR file:.lab1.hs:46 - Type error in explicitly typed binding
*** Term           : ratfloat
*** Type           : Fraction -> Integer
*** Does not match : Fraction -> Float

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

醉殇 2022-08-20 15:48:03

原帖由 sysabod 于 2009-3-22 15:08 发表

请问这个frominteger是什么意思呢?谢谢

这个 google 一下就有了。

夕色琉璃 2022-08-20 03:29:32

在 hugs 交互环境中,用 :t 可以看一个对象的类型。

  1. Prelude> :t (/)
  2. (/) :: (Fractional a) => a -> a -> a

复制代码

可以看出,/ 的两个参数的类型必须是在 Fractional 类中的。而 Integer 不在 Fractional 类中,所以直接把 Integer 作为 / 的参数会出错。

fromInteger 把 Integer 型转成其它类型,但具体转成什么类型要看上下文。

  1. Hugs> :t fromInteger
  2. fromInteger :: Num a => Integer -> a

复制代码

可以看出,fromInteger 的参数是 Integer,返回值的类型在 Num 类中。

对于表达式 (fromInteger 1)/(fromInteger 2),haksell 的自动类型推导机制能从 / 推导出 fromeInteger 的返回类型在 Fractional 中。

即在这里,fromInteger 1 把 1 转成了小数。

[ 本帖最后由 win_hate 于 2009-3-22 15:36 编辑 ]

千秋岁 2022-08-19 21:22:13

原帖由 win_hate 于 2009-3-22 00:34 发表

type Fraction = (Integer,Integer )
ratfloat :: Fraction -> Float   -- convert to floating numbers
ratfloat  (a,b) = (fromInteger a)/(fromInteger b)

用 fromInteger 把 Integer 转过来。

请问这个frominteger是什么意思呢?谢谢

默嘫て 2022-08-19 15:09:52
  1. type Fraction = (Integer,Integer )
  2. ratfloat :: Fraction -> Float   -- convert to floating numbers
  3. ratfloat  (a,b) = (fromInteger a)/(fromInteger b)

复制代码

用 fromInteger 把 Integer 转过来。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文