[racket] Why choose the 'let*' construct over the 'define' construct when both can have sequential scope?

From: Don Green (infodeveloperdon at gmail.com)
Date: Thu Feb 19 12:40:45 EST 2015

What is/are the reason(s) for choosing the 'let*' construct over the
'define' construct?

(define (print-two f)
  (let* ([_ (print (first f))]
         [f (rest f)]
         [_ (print (first f))]
         [f (rest f)])
    f))

(define print-two
  (lambda (f)
   (print (first f))
   (set! f (rest f))
   (print (first f))
   (set! f (rest f))
   f))

(void (print-two '(1 2))) ;=> 12
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150219/e1d20fa6/attachment.html>

Posted on the users mailing list.