From e4abd5d4d353abb95b7b04b985ef707c2f9c2243 Mon Sep 17 00:00:00 2001 From: Jim Pryor Date: Sat, 18 Sep 2010 17:51:27 -0400 Subject: [PATCH] tweaked week3 Signed-off-by: Jim Pryor --- week3.mdwn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/week3.mdwn b/week3.mdwn index 9e670415..a01df345 100644 --- a/week3.mdwn +++ b/week3.mdwn @@ -36,7 +36,7 @@ What is the `let rec` in the OCaml code and the `letrec` in the Scheme code? The In Scheme: - > (letrec [(get_length + (letrec [(get_length (lambda (lst) (if (null? lst) 0 [+ 1 (get_length (cdr lst))] )) )] (get_length (list 20 30))) ; this evaluates to 2 @@ -50,7 +50,7 @@ If you instead use an ordinary `let` (or `let*`), here's what would happen, in O Here's Scheme: - > (let* [(get_length + (let* [(get_length (lambda (lst) (if (null? lst) 0 [+ 1 (get_length (cdr lst))] )) )] (get_length (list 20 30))) ; fails with error "reference to undefined identifier: get_length" @@ -100,10 +100,10 @@ So how could we do it? And how do OCaml and Scheme manage to do it, with their ` 2. If you tried this in Scheme: - > (define get_length + (define get_length (lambda (lst) (if (null? lst) 0 [+ 1 (get_length (cdr lst))] )) ) - > (get_length (list 20 30)) + (get_length (list 20 30)) You'd find that it works! This is because `define` in Scheme is really shorthand for `letrec`, not for plain `let` or `let*`. So we should regard this as cheating, too. -- 2.11.0