Chinaunix

标题: 大家好,请教一个有关类型的问题 [打印本页]

作者: sysabod    时间: 2009-03-21 17:10
标题: 大家好,请教一个有关类型的问题
  1. {-This  is a program demostrates the calculating of the fraction
  2. progamming by Haskell
  3. -}

  4. qsort ::  Ord a=>  [a] -> [a]
  5. qsort [] = []
  6. qsort (x:xs)  = qsort larger ++ [x] ++ qsort smaller
  7.                  where
  8.                           smaller =[ a|a <- xs,a<=x]
  9.                           larger  = [ a| a <- xs ,a>x]
  10. type Fraction = (Int,Int )
  11. maxGYS ::   Int -> Int -> Int  --求最大公约数
  12. maxGYS  m n
  13.                      | m<n   =head [x | x <- qsort [1..m],m`mod` x==0, n`mod` x==0]
  14.                      | m == n   =m
  15.                      | otherwise  =head [ x| x <- qsort[1..n] , m`mod` x==0, n`mod` x==0]
  16. --maxGYS  a  b   
  17.                      
  18. minGBS  ::  Int -> Int -> Int   -- 求两个数的最小公倍数
  19. minGBS  a  b
  20.                       | a==b     =a
  21.                       | a/=b     =head[ x | x <- [a,2*a .. a*b] , x `mod` a ==0 , x `mod` b ==0     ]

  22. --simplify  :: Int -> Int -> Fraction             --约分函数
  23. simplify  a b  = if a == b then (1 , 1)  else  ( a / (maxGYS a b ) ,  b/ (maxGYS a b ) )
  24. --simplify  a b  =  ( a / (maxGYS a b )  ,  b / (maxGYS a b ) )
  25.                     
  26. ratplus :: Fraction ->Fraction ->Fraction   -- the plus calc
  27. ratplus (a,b) (c,d)
  28.                         | b==d      = (a+c, b)
  29.                         | b /= d     = (  a+(minGBS b  d) /a+c+(minGBS b d)  /c  ,minGBS b d )

  30. --ratfloat :: Fraction -> Float   -- convert to floating numbers
  31. --ratfloat  (a,b) = (a :: Float ) / (b :: Float)
  32.                                                                        
复制代码

winhugs下的出错信息是ERROR file:.\lab1.hs:25 - Instance of Fractional Int required for definition of simplify
也就是simplify函数的问题,请问应该怎么改呢?
作者: flw    时间: 2009-03-21 18:44
也许换成 `div` 就好了。/ 的类型不是 Int。
作者: sysabod    时间: 2009-03-21 22:46
原帖由 flw 于 2009-3-21 18:44 发表
也许换成 `div` 就好了。/ 的类型不是 Int。

谢谢,可以了:wink:




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2