boot2

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

070-type-predicates.scm (1026B)


      1 ; boolean?, integer?, procedure? — tag-checking predicates.
      2 ;
      3 ; Per R7RS-small, define-record-type does not expose the type
      4 ; descriptor or any cross-type record predicate. record? /
      5 ; record-type? are not part of the user-facing API.
      6 
      7 ; boolean? — only #t and #f
      8 (if (boolean? #t) 0 (sys-exit 1))
      9 (if (boolean? #f) 0 (sys-exit 2))
     10 (if (not (boolean? 0)) 0 (sys-exit 3))
     11 (if (not (boolean? '())) 0 (sys-exit 4))
     12 (if (not (boolean? 'foo)) 0 (sys-exit 5))
     13 
     14 ; integer? — fixnums only
     15 (if (integer? 0) 0 (sys-exit 6))
     16 (if (integer? 42) 0 (sys-exit 7))
     17 (if (integer? -7) 0 (sys-exit 8))
     18 (if (not (integer? #t)) 0 (sys-exit 9))
     19 (if (not (integer? '(1 2))) 0 (sys-exit 10))
     20 (if (not (integer? 'sym)) 0 (sys-exit 11))
     21 
     22 ; procedure? — closures and primitives
     23 (if (procedure? car) 0 (sys-exit 12))
     24 (if (procedure? +) 0 (sys-exit 13))
     25 (if (procedure? (lambda (x) x)) 0 (sys-exit 14))
     26 (if (not (procedure? 1)) 0 (sys-exit 15))
     27 (if (not (procedure? 'car)) 0 (sys-exit 16))
     28 (if (not (procedure? '())) 0 (sys-exit 17))
     29 
     30 (sys-exit 0)