blob: 96dd1dd37c1e2975b0912de66a5ee49413f1159e (
plain)
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
|
(define (true? expr) (eq? expr 'true))
(define (false? expr) (eq? expr 'false))
(define (bool? expr)
(or (true? expr)
(false? expr)))
(define (and-special . items)
(if (null? items)
'false
(let ([first (car items)])
(cond
[(true? first) (apply and-special (cdr items))]
[(false? first) 'false]
[else (error "AND: unable to evaluate non-boolean form" first)]))))
(define (or-special . items)
(if (null? items)
'false
(let ([first (car items)])
(cond
[(true? first) 'true]
[(false? first) (apply or-special (cdr items))]
[else (error "OR: unable to evaluate non-boolean form" first)]))))
(define (not-fn x) (not (true? x)))
(define primitives
`((+ . ,+)
(- . ,-)
(* . ,*)
(&& . ,and-special)
(|| . ,or-special)
(/= . ,not-fn)))
(define (primitive-names) (map car primitives))
(define (primitive-objs) (map cdr primitives))
|