boot2

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

114-define-values.scm (677B)


      1 ; define-values: bind multiple top-level names from a values producer.
      2 
      3 (define-values (a b c) (values 1 2 3))
      4 (if (= 6 (+ a b c)) 0 (sys-exit 1))
      5 
      6 ; Single-name formals work with non-values value-expr.
      7 (define-values (x) 42)
      8 (if (= 42 x) 0 (sys-exit 2))
      9 
     10 ; Variadic formal collects all yielded values.
     11 (define-values rest (values 10 20 30))
     12 (if (equal? (list 10 20 30) rest) 0 (sys-exit 3))
     13 
     14 ; Dotted formal: head + tail.
     15 (define-values (h . t) (values 1 2 3))
     16 (if (= 1 h) 0 (sys-exit 4))
     17 (if (equal? (list 2 3) t) 0 (sys-exit 5))
     18 
     19 ; Subsequent define-values reassigns globally.
     20 (define-values (a b c) (values 100 200 300))
     21 (if (= 600 (+ a b c)) 0 (sys-exit 6))
     22 
     23 (sys-exit 0)