-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtests.scm
95 lines (88 loc) · 1.34 KB
/
tests.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
; defines
(define a 3)
(define b a)
1
2
a
b
; lambdas
(lambda (x) x)
((lambda (x) x) 4)
(define a (lambda (x) x))
(a 1)
(a 2)
((lambda () 2))
(define (b) 2)
b
(b)
(define (f a) (lambda () a))
((f 0))
; higher-order functions
((lambda (f a) (f a)) (lambda (b) b) 420)
(define (f a) (lambda (m) (m a)))
(define y (f 1))
(y (lambda (x) x))
(define (g b) (b (lambda (x) x)))
(g y)
; variadics
(lambda l l)
((lambda l l))
((lambda l l) 0)
((lambda l l) 0 1)
((lambda l l) 0 1 2)
(define (list . l) l)
(list)
(list 0)
(list 0 1)
(list 0 1 2)
(define (first first . rest) first)
(first 0)
(first 0 1)
(first 0 1 2)
(define (rest first . rest) rest)
(rest 0)
(rest 0 1)
(rest 0 1 2)
; multi-statement procedures
(lambda () 0 1)
((lambda () 0 1))
(define (f a b) a b)
(f 'one 'two)
((lambda a a a a a) 'one 'two)
; quotes
1
' 1
(quote 1)
'()
(quote ())
'(())
(quote (()))
'a
(quote a)
' (1 2 3)
(quote (1 2 3))
((lambda (a) a) '(1 2 3))
((lambda (a) a) (quote (1 2 3)))
(define x ' (1 . 2))
x
(define y (quote (1 . 2)))
y
; true/false
(define (if c t f) (c t f))
(define (t l r) l)
(define (f l r) r)
(if t 'a 'b)
(if f 'c 'd)
(define (if c f t) (c f t))
(if t 'a 'b)
(if f 'c 'd)
; pairs
(define (cons car cdr)
(lambda (m) (m car cdr)))
(define (car p)
(p (lambda (car cdr) car)))
(define (cdr p)
(p (lambda (car cdr) cdr)))
(define p (cons 'car 'cdr))
(car p)
(cdr p)