[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: C++ declaration style programming?
From: |
Viktor Pavlenko |
Subject: |
Re: C++ declaration style programming? |
Date: |
Tue, 20 Jan 2004 22:58:17 -0500 |
>>>>> "HN" == Han-Wen Nienhuys <address@hidden> writes:
HN> Usually in C++, I do
HN> int var1 = something ();
HN> int var2 = something (var1);
HN> int var3 = something (var1, var2);
HN> etc.
HN> in Scheme, this translates quite well to (let* ) :
HN> (let*
HN> ((var1 (something))
HN> (var2 (something var1))
HN> (var3 (something var1 var2)))
HN> .. )
HN> However, it doesn't work so well when I mix commands with
HN> declarations, eg.
HN> int var1 = something ();
HN> var1 += 2;
HN> int var2 = something (var1);
HN> var2 += var1;
HN> int var3 = something (var1, var2);
HN> etc.
I think the following still looks OK and cleaner than the C above:
(let* ((var1 (+ (something) 2))
(var2 (+ (something var1) var1))
(var3 (something var1 var2)))
If you need to change var3 at a later point, just give it another name:
(let ((var3-2 (+ (something-else var3))))
(...
instead of set!-ting it. The problem with set! in a lexically scoped
language is that you can change the binding of a variable defined at a
higher level by mistake:
guile> (define a 123)
guile> a
123
guile> (let ((a 111)) (set! a 444)) ;;works as expected
guile> a
123
guile> (let ((b 111)) (set! a 444)) ;;oops
guile> a
444
Lexical bindings with let and friends will never get you into this
trouble.
(Scheme gurus, please correct me if my reasoning is wrong)
HN> I would like to have some macro, where I can write the Scheme
HN> analogon like
HN> (begin-let*
HN> (def var1 (something))
HN> (set! var1 (+ var1 2))
HN> (def var2 (something var1))
HN> (set! var2 (+ var2 var1))
HN> (def var3 (something var1 var2))
HN> ... )
Probably you can define that syntax, but the passage above doesn't
look like Scheme...
--
Viktor