This page reports the results of the expressions (letrec ((x 0) (y x)) y)
and (letrec* ((x 0) (y x)) y)
. The former is not defined (in R6RS, it must return an error) and the latter should always return 0, provided letrec*
is supported (it is required by R6RS and R7RS, but not by earlier reports). It also looks at
(let ((z 0))
(define x 0)
(define y x)
y)
which in R5RS and earlier is defined to be the same as the letrec
version, and in R6RS and R7RS is defined to be the same as the letrec*
version.
Note: UMB does not support any of these constructions.
Reports an error: MIT, Scheme48/scsh, Chez, Vicare, Ypsilon, Mosh, IronScheme, SigScheme, TinyScheme
Returns 0: Racket, Gauche, Guile, Kawa, SISC (with a warning), SCM, Larceny, NexJ, JScheme, KSi, RScheme, XLisp, Rep, Schemik, Elk, Llava, SXM, Sizzle, FemtoLisp, Dfsch, Inlab, Foment, Owl Lisp, Chibi, Sagittarius
Returns a different value: Gambit, Chicken, Bigloo, STklos, Scheme 9, S7, BDC
Does not support letrec
: Shoe
Returns 0: Chicken, Bigloo, Scheme48/scsh, Guile, Chez, Larceny, Ypsilon, Mosh, IronScheme, NexJ, KSi, Scheme 9, S7, Foment, Chibi, Sagittarius, STklos
Does not support letrec*
: Racket, Gauche, MIT, Gambit, Kawa, SISC, SCM, JScheme, SigScheme, Shoe, TinyScheme, RScheme, BDC, XLisp, Rep, Schemik, Elk, Llava, SXM, Sizzle, FemtoLisp, Dfsch, Inlab, Owl Lisp
Reports an error: Scheme48/scsh, SigScheme
Returns 0: Racket, Gauche, MIT, Chicken, Bigloo, Guile, Kawa, SISC (with a warning), SCM, Chez, Vicare, Larceny, Ypsilon, Mosh, IronScheme, NexJ, JScheme, STklos, KSi, Shoe, TinyScheme, RScheme, S7, BDC, XLisp, Rep, Schemik, Elk, Llava, Sizzle, FemtoLisp, Dfsch, Inlab, Foment, Owl Lisp, Chibi, Sagittarius
Returns a different value: Gambit, Scheme 9, SXM