guile-user
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]