boot2

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

108-variadic-arith.scm (3404B)


      1 ; Variadic arity for the arithmetic / comparison / bitwise primitives.
      2 ; + * bit-and bit-or bit-xor accept 0+ args; - accepts 1+ (unary
      3 ; negate); = < > accept 2+ args and chain pairwise.
      4 
      5 ;; --- + (0+) -------------------------------------------------------------
      6 (if (= 0  (+))                  0 (sys-exit 1))
      7 (if (= 7  (+ 7))                0 (sys-exit 2))
      8 (if (= 5  (+ 2 3))              0 (sys-exit 3))
      9 (if (= 10 (+ 1 2 3 4))          0 (sys-exit 4))
     10 (if (= 0  (+ 1 -1 2 -2))        0 (sys-exit 5))
     11 
     12 ;; --- - (1+) -------------------------------------------------------------
     13 (if (= -5 (- 5))                0 (sys-exit 6))
     14 (if (= 5  (- -5))               0 (sys-exit 7))
     15 (if (= 1  (- 3 2))              0 (sys-exit 8))
     16 (if (= 4  (- 10 1 2 3))         0 (sys-exit 9))
     17 (if (= -6 (- 0 1 2 3))          0 (sys-exit 10))
     18 
     19 ;; --- * (0+) -------------------------------------------------------------
     20 (if (= 1   (*))                 0 (sys-exit 11))
     21 (if (= 9   (* 9))               0 (sys-exit 12))
     22 (if (= 6   (* 2 3))             0 (sys-exit 13))
     23 (if (= 24  (* 2 3 4))           0 (sys-exit 14))
     24 (if (= 0   (* 1 2 0 3))         0 (sys-exit 15))
     25 (if (= -24 (* -1 2 3 4))        0 (sys-exit 16))
     26 
     27 ;; --- = (2+) -------------------------------------------------------------
     28 (if      (= 1 1)                0 (sys-exit 17))
     29 (if (not (= 1 2))               0 (sys-exit 18))
     30 (if      (= 7 7 7)              0 (sys-exit 19))
     31 (if (not (= 7 7 8))             0 (sys-exit 20))
     32 (if (not (= 7 8 7))             0 (sys-exit 21))
     33 (if      (= 0 0 0 0)            0 (sys-exit 22))
     34 
     35 ;; --- < (2+) -------------------------------------------------------------
     36 (if      (< 1 2)                0 (sys-exit 23))
     37 (if (not (< 2 1))               0 (sys-exit 24))
     38 (if (not (< 1 1))               0 (sys-exit 25))
     39 (if      (< 1 2 3)              0 (sys-exit 26))
     40 (if (not (< 1 2 2))             0 (sys-exit 27))
     41 (if (not (< 1 3 2))             0 (sys-exit 28))
     42 (if      (< -3 -2 -1 0 1)       0 (sys-exit 29))
     43 
     44 ;; --- > (2+) -------------------------------------------------------------
     45 (if      (> 2 1)                0 (sys-exit 30))
     46 (if (not (> 1 2))               0 (sys-exit 31))
     47 (if      (> 3 2 1)              0 (sys-exit 32))
     48 (if (not (> 3 2 2))             0 (sys-exit 33))
     49 (if (not (> 3 1 2))             0 (sys-exit 34))
     50 (if      (> 5 4 3 2 1 0 -1)     0 (sys-exit 35))
     51 
     52 ;; --- bit-and (0+, identity -1) ------------------------------------------
     53 (if (= -1    (bit-and))         0 (sys-exit 36))
     54 (if (= #x33  (bit-and #x33))    0 (sys-exit 37))
     55 (if (= #x03  (bit-and #x33 #x0f))      0 (sys-exit 38))
     56 (if (= #x01  (bit-and #x33 #x0f #x05)) 0 (sys-exit 39))
     57 (if (= 0     (bit-and #x0f #xf0))      0 (sys-exit 40))
     58 
     59 ;; --- bit-or (0+, identity 0) --------------------------------------------
     60 (if (= 0     (bit-or))          0 (sys-exit 41))
     61 (if (= #x21  (bit-or #x21))     0 (sys-exit 42))
     62 (if (= #x3f  (bit-or #x33 #x0f))       0 (sys-exit 43))
     63 (if (= #x37  (bit-or #x33 #x04 #x10))  0 (sys-exit 44))
     64 (if (= 7     (bit-or 1 2 4))           0 (sys-exit 45))
     65 
     66 ;; --- bit-xor (0+, identity 0) -------------------------------------------
     67 (if (= 0     (bit-xor))         0 (sys-exit 46))
     68 (if (= #x55  (bit-xor #x55))    0 (sys-exit 47))
     69 (if (= #x33  (bit-xor #x55 #x66))      0 (sys-exit 48))
     70 (if (= 0     (bit-xor #x0f #x0f))      0 (sys-exit 49))
     71 (if (= #x55  (bit-xor #x0f #x33 #x66 #x0f)) 0 (sys-exit 50))
     72 
     73 (sys-exit 0)