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)