Combine let* let letrec into super-let (or simply let)

This is a discussion on Combine let* let letrec into super-let (or simply let) within the Scheme forums in Programming Languages category; 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....

Go Back   Application Development Forum > Programming Languages > Scheme

Object Mix

Register FAQ Calendar Search Today's Posts Mark Forums Read
  #1  
Old 08-26-2008, 01:19 PM
narutocanada@gmail.com
Guest
 
Default Combine let* let letrec into super-let (or simply let)

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.



Reply With Quote
  #2  
Old 08-26-2008, 02:02 PM
Pascal J. Bourguignon
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

"narutocanada@gmail.com" <narutocanada@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)


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
Reply With Quote
  #3  
Old 08-26-2008, 02:10 PM
Daniel Kraft
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

Pascal J. Bourguignon wrote:
> "narutocanada@gmail.com" <narutocanada@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
Reply With Quote
  #4  
Old 08-26-2008, 02:42 PM
Lauri Alanko
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

In article <f22087d8-22b2-4dc6-bddd-a83b69bd6df5@p31g2000prf.googlegroups.com>,
narutocanada@gmail.com <narutocanada@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/...l#node_idx_406


Lauri
Reply With Quote
  #5  
Old 08-27-2008, 06:41 AM
jos koot
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

On Aug 26, 6:19 pm, "narutocan...@gmail.com" <narutocan...@gmail.com>
wrote:
> 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.


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/mzl...etc..ss)._let+))
Jos
Reply With Quote
  #6  
Old 08-27-2008, 08:54 AM
Phil Bewig
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

On Aug 26, 12:19 pm, "narutocan...@gmail.com" <narutocan...@gmail.com>
wrote:
> 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 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.
Reply With Quote
  #7  
Old 08-27-2008, 12:51 PM
namekuseijin
Guest
 
Default Re: Combine let* let letrec into super-let (or simply let)

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.


I agree. It's good specialization and I believe that also leads to
more efficient implementations.
Reply With Quote
Reply


Thread Tools
Display Modes


All times are GMT -5. The time now is 08:29 PM.


Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
vB Ad Management by =RedTyger=

In an effort to better serve ads to our visitors, cookies are used on objectmix.com. For more information, check out our Privacy Policy.