guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C++ declaration style programming?


From: Lynn Winebarger
Subject: Re: C++ declaration style programming?
Date: Wed, 21 Jan 2004 00:03:18 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830


Han-Wen Nienhuys wrote:

>  (begin-let*
>   (def var1 (something))
>   (set! var1 (+ var1 2))
>   (def var2 (something var1))
>   (set! var2 (+ var2 var1))
>   (def var3 (something var1 var2))
>   ...  )
>
>
> This can presumably be done by writing a macro begin-let* that expands
> the statement list in a suitably nested let*
>
> However, I was wondering whether there exists a standard library
> syntax mechanism that lets me write code in this fashion.
>

   Untested...

(define-syntax begin-let*
   (syntax-rules ()
     ((_ args ...)
      (begin-let*-helper () () (args ...)))))

(define-syntax begin-let*-helper
   (syntax-rules (def)
     ((_ (var ...) (statement ...) ())
      (let ((var #f) ...) statement ...))
     ((_ vars (statement ...) ((def x y) . rest))
      (begin-let*-helper (x . vars) (statement ... (set! x y)) rest))
     ((_ vars (statement ...) (non-decl . rest))
      (begin-let*-helper vars (statement ... (set! x y)) rest))))


  You could be slightly more clever about reversing the statements _after_
accumulating them, rather than appending (and building the same list over
and over and over...).  But I'll leave that as an easy exercise.
   Odd to call it "declaration style", though.

Lynn






reply via email to

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