[plt-scheme] Re: a few questions (was: Scheme questions?)

From: Gregory Woodhouse (gregory.woodhouse at sbcglobal.net)
Date: Sun Dec 4 18:01:17 EST 2005

On Dec 4, 2005, at 2:36 PM, Carl Eastlund wrote:

> If I recall correctly, LABELS is an old form of letrec.

Hmm...Trying to  (somewhat mechanically) translate

           (LAMBDA (N)
                   (LABELS ((L1 (M ANS)
                                (LP N 1)))
                           (LP (LAMBDA (M ANS)
                                       (IF (= M 0) (RETURN ANS)
                                           (L2 M ANS))))
                           (L2 (LAMBDA (M ANS)
                                       (LP (- M 1) (* M ANS))))
                           (L1 NIL NIL))))

(from the same paper), I get

Welcome to DrScheme, version 299.407-svn4dec2005.
Language: Pretty Big (includes MrEd and Advanced Student).
 > (define fact
     (lambda (n)
       (letrec ((l1 (lambda(m ans)
                      (lp n 1)))
                (lp lambda (m ans)
                    (if (= m 0) ans
                        (l2 m ans))))
         (l2 (lambda (m ans)
               (lp (- m 1) (* m ans)))))
       (l1 '() '())))
letrec: bad syntax in: (lp lambda (m ans) (if (= m 0) ans (l2 m ans)))

(I don't know what RETURN is, but I assume it's an escape, and so I  
would have thought replacing (RETURN ANS) with just ans would work,  
or at least be syntactically valid.)

Gregory Woodhouse
gregory.woodhouse at sbcglobal.net

"You must unlearn what you have learned."

Posted on the users mailing list.