git @ Cat's Eye Technologies Pixley / 86493db
Stop cheating in test output. No fewer failures, though. Cat's Eye Technologies 11 years ago
2 changed file(s) with 40 addition(s) and 23 deletion(s). Raw diff Collapse all Expand all
4444
4545 ### Clean up ###
4646
47 #rm -f init.scm next.scm program.scm expression.scm
47 rm -f init.scm next.scm program.scm expression.scm
3737 Predicates and Types
3838 --------------------
3939
40 Because booleans don't actually have a defined representation in
41 Pixley, the next few tests are cheating a bit, relying on Scheme's
42 defined representation for booleans instead. This would be easy
43 to fix up, but a bit tedious: just wrap each of these in
44
45 (cond (... (quote true)) (else (quote false)))
46
4740 `equal?` works on symbols.
4841
42 | (cond (
4943 | (equal? (quote a) (quote a))
50 = #t
51
44 | (quote true)) (else (quote false)))
45 = true
46
47 | (cond (
5248 | (equal? (quote a) (quote b))
53 = #f
49 | (quote true)) (else (quote false)))
50 = false
5451
5552 `equal?` works on lists.
5653
54 | (cond (
5755 | (equal? (quote (one (two three)))
5856 | (cons (quote one) (quote ((two three)))))
59 = #t
57 | (quote true)) (else (quote false)))
58 = true
6059
6160 A symbol is not a list.
6261
62 | (cond (
6363 | (list? (quote a))
64 = #f
64 | (quote true)) (else (quote false)))
65 = false
6566
6667 A list whose final cons cell's tail contains a null, is a list.
6768
69 | (cond (
6870 | (list? (cons (quote a) (quote ())))
69 = #t
70
71 | (quote true)) (else (quote false)))
72 = true
73
74 | (cond (
7175 | (list? (quote (a b c d e f)))
72 = #t
76 | (quote true)) (else (quote false)))
77 = true
7378
7479 A pair is not a list.
7580
7681 Actually, pairs aren't defined at all in Pixley, so I wouldn't
7782 blame an implementation for just freaking out at this one.
7883
84 | (cond (
7985 | (list? (cons (quote a) (quote b)))
80 = #f
86 | (quote true)) (else (quote false)))
87 = false
8188
8289 Booleans are not lists.
8390
91 | (cond (
8492 | (list? (equal? (quote a) (quote b)))
85 = #f
93 | (quote true)) (else (quote false)))
94 = false
8695
8796 Lambda functions are not lists.
8897
98 | (cond (
8999 | (list? (lambda (x y) (y x)))
90 = #f
100 | (quote true)) (else (quote false)))
101 = false
91102
92103 But the empty list is a list.
93104
105 | (cond (
94106 | (list? (quote ()))
95 = #t
96
107 | (quote true)) (else (quote false)))
108 = true
109
110 | (cond (
97111 | (list? (cdr (quote (foo))))
98 = #t
112 | (quote true)) (else (quote false)))
113 = true
99114
100115 The empty list can be expressed as `(quote ())`.
101116
117 | (cond (
102118 | (equal? (cdr (quote (foo))) (quote ()))
103 = #t
119 | (quote true)) (else (quote false)))
120 = true
104121
105122 Binding to Names
106123 ----------------