[Haskell-cafe] Rational and % operator remix
lennart at augustsson.net
Sun Mar 29 14:29:30 EDT 2009
You can use floor in a Rational directly, no need to take it apart and divide.
There is no need to write (toRational 1), just write 1.
Don't write (subtract ai a), write (ai - i).
You also have a type error; the ai should no be a Rational, so you
need to move to toRational call to the comparison.
2009/3/29 michael rice <nowgate at yahoo.com>:
> Thanks again for the help last night.
> The second function cf2 is an attempt to reverse the process of the first
> function, i.e., given a rational number it returns a list of integers,
> possibly infinite, but you shouldn't get into trouble if you use 98%67 as
> input (output should be [1,2,6,5]). The interpreter is complaining about the
> '=' following the 'in' keyword. Is there a better way to state this?
> import Data.Ratio
> cf :: [Int] -> Rational
> cf (x:) = toRational x
> cf (x:xs) = toRational x + 1 / cf xs
> cf2 :: Rational -> [Int]
> cf2 a = let ai = toRational (floor ((numerator a) / (denominator a)))
> if a = ai
> then [a]
> else ai : cf2 ((toRational 1) / (subtract ai a))
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe