Continued fraction/Arithmetic/Construct from rational number: Difference between revisions

no edit summary
mNo edit summary
No edit summary
Line 212:
3 7 7142857</pre>
 
=={{header|Common Lisp}}==
<lang lisp>(defun r2cf (n1 n2)
(lambda ()
(unless (zerop n2)
(multiple-value-bind (t1 r)
(floor n1 n2)
(setf n1 n2 n2 r)
t1))))
 
;; Example usage
 
(defun demo-generator (numbers)
(let* ((n1 (car numbers))
(n2 (cadr numbers))
(gen (r2cf n1 n2)))
(format t "~S ; ~S~%"
`(r2cf ,n1 ,n2)
(loop
:for r = (funcall gen)
:until (null r)
:collect r))))
 
(mapcar #'demo-generator
'((1 2)
(3 1)
(23 8)
(13 11)
(22 7)
(-151 77)
(14142 10000)
(141421 100000)
(1414214 1000000)
(14142136 10000000)
(31 10)
(314 100)
(3142 1000)
(31428 10000)
(314285 100000)
(3142857 1000000)
(31428571 10000000)
(314285714 100000000)
(3141592653589793 1000000000000000)))</lang>
 
Output:
<pre>
(R2CF 3 1) ; (3)
(R2CF 23 8) ; (2 1 7)
(R2CF 13 11) ; (1 5 2)
(R2CF 22 7) ; (3 7)
(R2CF -151 77) ; (-2 25 1 2)
(R2CF 14142 10000) ; (1 2 2 2 2 2 1 1 29)
(R2CF 141421 100000) ; (1 2 2 2 2 2 2 3 1 1 3 1 7 2)
(R2CF 1414214 1000000) ; (1 2 2 2 2 2 2 2 3 6 1 2 1 12)
(R2CF 14142136 10000000) ; (1 2 2 2 2 2 2 2 2 2 6 1 2 4 1 1 2)
(R2CF 31 10) ; (3 10)
(R2CF 314 100) ; (3 7 7)
(R2CF 3142 1000) ; (3 7 23 1 2)
(R2CF 31428 10000) ; (3 7 357)
(R2CF 314285 100000) ; (3 7 2857)
(R2CF 3142857 1000000) ; (3 7 142857)
(R2CF 31428571 10000000) ; (3 7 476190 3)
(R2CF 314285714 100000000) ; (3 7 7142857)
(R2CF 3141592653589793 1000000000000000) ; (3 7 15 1 292 1 1 1 2 1 3 1 14 4 2 3 1 12 5 1 5 20 1 11 1 1 1 2)
</pre>
=={{header|F_Sharp|F#}}==
<lang fsharp>let rec r2cf n d =