The correct value of (rationalize 20 1) is 19, because 19/1 is the simplest rational that differs from 20 by an amount no more than 1. But it is not clear what the value of (rationalize 20 -1) should be. Is it also 19, or should an error be signaled?

(rationalize 20 1) => 19 and (rationalize 20 -1) => 19: Racket, MIT, Chicken with the numbers egg, Scheme48/scsh, Guile, Kawa, SISC, Chez, Vicare, Larceny, Ypsilon, Mosh, IronScheme, STklos, KSi, S7, Sagittarius, Foment, Chibi

(rationalize 20 1) => 19 but (rationalize 20 -1) signals an error: Gauche, Gambit

rationalize unsupported: Chicken, Bigloo, Detroit, Stalin, Scheme->C, SCM, NexJ, JScheme, SigScheme, Shoe, Mini-Scheme, TinyScheme, Scheme 9, RScheme, Unlikely, SIOD, BDC, XLisp, Rep, Schemik, Llava, Sizzle, FemtoLisp, Dfsch, Inlab, Picrin

(rationalize 20 1) => 20 and (rationalize 20 -1) => 20: UMB, SXM, Owl Lisp

Note that for a procedure that's been in the language since R2RS there are a remarkable number of Schemes that don't support it. I suspect this is because implementers assume that if they don't support arbitrary exact ratnums there is no point in implementing rationalize, though its arguments can be either exact or inexact.

Last modified 12 months ago Last modified on 07/01/16 02:31:29