-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrt-code.scm
67 lines (50 loc) · 1.44 KB
/
rt-code.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
(define (not v)
(if v #f #t))
(define (zero? v)
(if (%zero? v) #t #f))
(define (negative? v)
(if (%zero? (bitwise-and v %sign-bit)) #f #t))
(define (positive? v)
(if (or (zero? v)
(not (zero? (bitwise-and v %sign-bit))))
#f
#t))
(define (even? v)
(zero? (bitwise-and v 1)))
(define (odd? v)
(if (zero? (bitwise-and v 1)) #f #t))
(define (+ x y)
(+ x y))
(define (boolean? v)
(if (%tagged? %type-tag-mask %bool-tag v) #t #f))
(define (char? v)
(if (%tagged? %type-tag-mask %char-tag v) #t #f))
(define (eq? obj1 obj2)
(if (%eq? obj1 obj2) #t #f))
(define (empty? v)
(if (empty? v) #t #f))
(define (null? v)
(if (empty? v) #t #f))
(define (pair? v)
(if (%tagged? %type-tag-mask %cons-tag v) #t #f))
(define (integer? v)
(if (%tagged? %tagged-mask %tagged-tag v) #f #t))
(define (number? v)
;; synonymous with integer? for now...
(if (%tagged? %tagged-mask %tagged-tag v) #f #t))
(define (procedure? v)
(if (%tagged? %type-tag-mask %proc-tag v) #t #f))
;; (define (%multiply mcand mplier acc mask)
;; (if (= mask %max-fixnum-bit)
;; acc
;; (%multiply (+ mcand mcand)
;; mplier
;; (if (eq? (%nand mplier mask) %all-ones)
;; acc
;; (+ acc mcand))
;; (+ mask mask))))
;; (define (* mcand mplier)
;; (if (or (zero? mcand)
;; (zero? mplier))
;; 0
;; (%multiply mcand mplier 0 1)))