Page 1 of 1

let

Posted: Sat Oct 30, 2004 1:24 am
by eddier
Would it be difficult to fix let so that I could reference other local variables like

Code: Select all

(let (x (car L) y (car x) ...)
This would reduce the amount of nested lets like

Code: Select all

(let (x (car L))
  (let (y (car x))
  ...
What do you think about this one?

Eddie

Posted: Sat Oct 30, 2004 3:26 pm
by Lutz
do you mean let* (or letrec) ?

(set 'x 10)

(let ((x 3) (y (+ x 4)) (print y)) => 14

versus:

(letrec ((x 3) (y (+ x 4)) (print y)) => 7

Lutz

Posted: Mon Nov 01, 2004 1:47 pm
by eddier
I would use the (letrec more. What is the difference between let* and let?

Eddie

Posted: Mon Nov 01, 2004 1:52 pm
by Lutz
'let*' and 'letrec' are the same thing, they are just differently named in different LISPs. I implemented is yesterday as 'letr', I thought 'letrec' is too long to type for a function which will be used by some people quite often so 'letr' it will be in version 8.2.6

Lutz

Posted: Mon Nov 01, 2004 1:55 pm
by eddier
Thanks Lutz :)

Eddie

Posted: Tue Nov 02, 2004 10:48 am
by Qrczak
Lutz wrote:'let*' and 'letrec' are the same thing, they are just differently named in different LISPs.
Scheme has both let* and letrec, and they are not the same thing.

let* allows each expression to refer to variables defined above it. It guarantees that expressions will be evaluated in order. Common Lisp has the same let*.

letrec allows each expression to refer to any variable in the group, but all references must be made inside function closures - it must be possible to evaluate all expressions to values before binding any variable. Expressions may be evaluated in arbitrary order.

Posted: Tue Nov 02, 2004 12:58 pm
by Lutz
thanks for the clarification

Lutz