[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

(DEFINE FACT
           (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."
--Yoda





Posted on the users mailing list.