<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Correct, if it can be stated as a Rational then it terminates. I was messing around last night with the first function on a sequence that approximates sqrt(2)<br><br>cf (take 25 (1: [2,2..]))<br><br>forgetting that while the sequence is infinite, I only grabbed the first 25 elements.<br><br>Your replacement code works fine except for a missing<br><br>import Data.Ratio<br><br>It's quite removed from what I was trying so I'm going to have to read ahead a bit to understand it.<br><br>Thanks,<br><br>Michael<br><br><br>--- On <b>Sun, 3/29/09, Daniel Fischer <i>&lt;daniel.is.fischer@web.de&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Daniel Fischer &lt;daniel.is.fischer@web.de&gt;<br>Subject: Re: [Haskell-cafe] Rational and % operator remix<br>To: haskell-cafe@haskell.org<br>Cc:
 "michael rice" &lt;nowgate@yahoo.com&gt;<br>Date: Sunday, March 29, 2009, 2:35 PM<br><br><br>-----Inline Attachment Follows-----<br><br><div class="plainMail">Am Sonntag 29 März 2009 19:40:19 schrieb michael rice:<br>&gt; Hi,<br>&gt;<br>&gt; Thanks again for the help last night.<br>&gt;<br>&gt; The second function cf2 is an attempt to reverse the process of the <br>first<br>&gt; function, i.e., given a rational number it returns a list of integers,<br>&gt; possibly infinite, <br><br>Not for rational numbers.<br><br>&gt; but you shouldn't get into trouble if you use 98%67 as<br>&gt; input (output should be [1,2,6,5]). The interpreter is complaining <br>about<br>&gt; the '=' following the 'in' keyword. <br><br>That should be '=='.<br><br>&gt; Is there a better way to state this?<br>&gt;<br>&gt; Michael<br>&gt;<br>&gt; import Data.Ratio<br>&gt; cf :: [Int] -&gt; Rational<br>&gt; cf (x:[]) = toRational x<br>&gt; cf (x:xs) = toRational x + 1 / cf
 xs<br>&gt;<br>&gt; cf2 :: Rational -&gt; [Int]<br>&gt; cf2 a = let ai = toRational (floor ((numerator a) / (denominator a)))<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if a = ai<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then [a]<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else ai : cf2 ((toRational 1) / (subtract ai a))<br><br>import Data.List (unfoldr)<br><br>cf3 :: Rational -&gt; [Integer] -- Int may overflow<br>cf3 0 = [0]<br>cf3 x = a0:unfoldr f r<br>&nbsp; where<br>&nbsp; &nbsp; a0 = floor x<br>&nbsp; &nbsp; r = x - fromInteger a0<br>&nbsp; &nbsp; f 0 = Nothing<br>&nbsp; &nbsp; f y = Just (properFraction $ recip y)<br><br><br></div></blockquote></td></tr></table><br>