13 views

Skip to first unread message

Aug 26, 2008, 1:19:18 PM8/26/08

to

hi

Please combine let* let letrec into super-let, (or simply let) for

future consideration.

I can not for my life see a reason for keeping "the other" "lets",

other than the super-let (or simply let). Is there occassions why one

would want "the other" "lets" other than super-let? If one word can

mean three features, why not use the super version for brevity. Just a

suggestion.

Aug 26, 2008, 2:02:13 PM8/26/08

to

"naruto...@gmail.com" <naruto...@gmail.com> writes:

The semantics are not the same.

First for simple values:

> (let ((a 1) (b 2)) (let ((a 3) (b a)) (display (list a b)) (newline)))

(3 1)

> (let ((a 1) (b 2)) (let* ((a 3) (b a)) (display (list a b)) (newline)))

(3 3)

> (let ((a 1) (b 2)) (letrec ((a 3) (b a)) (display (list a b)) (newline)))

(3 3)

Next for functions:

> (let ((a (lambda (x) 1)) (b (lambda (x) 2)))

(let ((a (lambda (x) (if (< 0 x) (cons 3 (a (- x 1))) '(3))))

(b (lambda (x) (cons 4 (a x)))))

(display (list (a 1) (b 1))) (newline)))

((3 . 1) (4 . 1))

> (let ((a (lambda (x) 1)) (b (lambda (x) 2)))

(let* ((a (lambda (x) (if (< 0 x) (cons 3 (a (- x 1))) '(3))))

(b (lambda (x) (cons 4 (a x)))))

(display (list (a 1) (b 1))) (newline)))

((3 . 1) (4 3 . 1))

> (let ((a (lambda (x) 1)) (b (lambda (x) 2)))

(letrec ((a (lambda (x) (if (< 0 x) (cons 3 (a (- x 1))) '(3))))

(b (lambda (x) (cons 4 (a x)))))

(display (list (a 1) (b 1))) (newline)))

((3 3) (4 3 3))

So, depending on the kind of results you want, you will choose one or

the other.

--

__Pascal Bourguignon__ http://www.informatimago.com/

Pour moi, la grande question n'a jamais été: «Qui suis-je? Où vais-je?»

comme l'a formulé si adroitement notre ami Pascal, mais plutôt:

«Comment vais-je m'en tirer?» -- Jean Yanne

Aug 26, 2008, 2:10:52 PM8/26/08

to

Pascal J. Bourguignon wrote:

> "naruto...@gmail.com" <naruto...@gmail.com> writes:

>

>> hi

>>

>> Please combine let* let letrec into super-let, (or simply let) for

>> future consideration.

>> I can not for my life see a reason for keeping "the other" "lets",

>> other than the super-let (or simply let). Is there occassions why one

>> would want "the other" "lets" other than super-let? If one word can

>> mean three features, why not use the super version for brevity. Just a

>> suggestion.

>

> The semantics are not the same.

>

> First for simple values:

>

>> (let ((a 1) (b 2)) (let ((a 3) (b a)) (display (list a b)) (newline)))

> (3 1)

>> (let ((a 1) (b 2)) (let* ((a 3) (b a)) (display (list a b)) (newline)))

> (3 3)

>> (let ((a 1) (b 2)) (letrec ((a 3) (b a)) (display (list a b)) (newline)))

> (3 3)

> "naruto...@gmail.com" <naruto...@gmail.com> writes:

>

>> hi

>>

>> Please combine let* let letrec into super-let, (or simply let) for

>> future consideration.

>> I can not for my life see a reason for keeping "the other" "lets",

>> other than the super-let (or simply let). Is there occassions why one

>> would want "the other" "lets" other than super-let? If one word can

>> mean three features, why not use the super version for brevity. Just a

>> suggestion.

>

> The semantics are not the same.

>

> First for simple values:

>

>> (let ((a 1) (b 2)) (let ((a 3) (b a)) (display (list a b)) (newline)))

> (3 1)

>> (let ((a 1) (b 2)) (let* ((a 3) (b a)) (display (list a b)) (newline)))

> (3 3)

>> (let ((a 1) (b 2)) (letrec ((a 3) (b a)) (display (list a b)) (newline)))

> (3 3)

True, but I can imagine the OP thought about using the letrec semantics

for everything (at least that's what I'd suggest).

What's a real-world (not examples as above) benefit of having a simple

(let) that can not be achieved easily with (letrec)? Or is the main

benefit of (let) to allow better optimization as its semantics is simpler?

Yours,

Daniel

--

Done: Arc-Bar-Cav-Sam-Val-Wiz, Dwa-Elf-Gno-Hum-Orc, Law-Neu-Cha, Fem-Mal

To go: Hea-Kni-Mon-Pri-Ran-Rog-Tou

Aug 26, 2008, 2:42:41 PM8/26/08

to

In article <f22087d8-22b2-4dc6...@p31g2000prf.googlegroups.com>,

naruto...@gmail.com <naruto...@gmail.com> wrote:

> Please combine let* let letrec into super-let, (or simply let) for

> future consideration.

naruto...@gmail.com <naruto...@gmail.com> wrote:

> Please combine let* let letrec into super-let, (or simply let) for

> future consideration.

Would letrec* fill your needs? It's supported by a number of

implementations, and it's also in R6RS:

http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_idx_406

Lauri

Aug 27, 2008, 6:41:45 AM8/27/08

to

On Aug 26, 6:19 pm, "narutocan...@gmail.com" <narutocan...@gmail.com>

wrote:

wrote:

PLT Scheme has let+, which combines let, let*, letrec, letrec*, let-

values, let*-values letrec-values and letrec*-values.

See http://docs.plt-scheme.org/mzlib/mzlib_etc.html#(form._((lib._mzlib/etc..ss)._let+))

Jos

Aug 27, 2008, 8:54:34 AM8/27/08

to

On Aug 26, 12:19 pm, "narutocan...@gmail.com" <narutocan...@gmail.com>

wrote:

wrote:

The use of the various kinds of let, as opposed to a single super-let,

can give the reader valuable clues about the nature of your program.

Letrec has different scoping rules than let. Using super-let would

confuse the reader about the intentions of the author.

Aug 27, 2008, 12:51:24 PM8/27/08

to

On Aug 27, 9:54 am, Phil Bewig <pbe...@gmail.com> wrote:

> The use of the various kinds of let, as opposed to a single super-let,

> can give the reader valuable clues about the nature of your program.

> Letrec has different scoping rules than let. Using super-let would

> confuse the reader about the intentions of the author.

> The use of the various kinds of let, as opposed to a single super-let,

> can give the reader valuable clues about the nature of your program.

> Letrec has different scoping rules than let. Using super-let would

> confuse the reader about the intentions of the author.

I agree. It's good specialization and I believe that also leads to

more efficient implementations.

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu