boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

113-letstar-values.scm (861B)


      1 ; let*-values: each clause's init sees bindings from prior clauses.
      2 
      3 ; Basic sequential: clause 2 references clause 1's bindings.
      4 (if (= 6 (let*-values (((a b) (values 1 2))
      5                        ((c)   (+ a b)))
      6            (+ c a b)))
      7     0 (sys-exit 1))
      8 
      9 ; Outer shadowing: outer a is shadowed by clause 1, then clause 2 sees the
     10 ; shadowed (clause-1) a, not the outer one. a=3, b=(+ 3 5)=8, body=3+8=11.
     11 (if (= 11
     12        (let ((a 100))
     13          (let*-values (((a) 3)
     14                        ((b) (+ a 5)))
     15            (+ a b))))
     16     0 (sys-exit 2))
     17 
     18 ; Single clause behaves like let-values.
     19 (if (= 3 (let*-values (((a b) (values 1 2))) (+ a b))) 0 (sys-exit 3))
     20 
     21 ; Variadic formal in middle clause.
     22 (if (= 6
     23        (let*-values ((xs    (values 1 2))
     24                      ((sum) (+ (car xs) (car (cdr xs)) 3)))
     25          sum))
     26     0 (sys-exit 4))
     27 
     28 (sys-exit 0)