Skip to content

Commit b7b75d2

Browse files
committed
tinkering
1 parent 980f2d7 commit b7b75d2

File tree

3 files changed

+64
-25
lines changed

3 files changed

+64
-25
lines changed

dynamic-typing.rkt

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -270,31 +270,68 @@
270270
(define/public (cast-insert)
271271
(lambda (e)
272272
(match e
273-
[(? integer?) `(inject ,e Integer)]
274-
[(? symbol?) e]
275-
[`(read) `(inject (read) Integer)]
276-
[`(function-ref ,e ,n) `(inject (function-ref ,e) (,@(map (lambda (x) 'Any) (range n)) -> Any))]
277-
[`(+ ,e1 ,e2) `(inject (+ (project ,((cast-insert) e1) Integer) (project ,((cast-insert) e2) Integer)) Integer)]
278-
[`(- ,e) `(inject (- (project ,((cast-insert) e) Integer)) Integer)]
279-
[`(let ([,x ,e1]) ,e2) `(let ([,x ,((cast-insert) e1)]) ,((cast-insert) e2))]
273+
[(? integer?)
274+
`(inject ,e Integer)]
275+
[(? symbol?)
276+
e]
277+
[`(read)
278+
`(inject (read) Integer)]
279+
[`(function-ref ,e ,n)
280+
`(inject (function-ref ,e)
281+
(,@(map (lambda (x) 'Any) (range n)) -> Any))]
282+
[`(+ ,e1 ,e2)
283+
`(inject (+ (project ,((cast-insert) e1) Integer)
284+
(project ,((cast-insert) e2) Integer))
285+
Integer)]
286+
[`(- ,e)
287+
`(inject (- (project ,((cast-insert) e) Integer))
288+
Integer)]
289+
[`(let ([,x ,e1]) ,e2)
290+
`(let ([,x ,((cast-insert) e1)])
291+
,((cast-insert) e2))]
280292
[#t `(inject #t Boolean)]
281293
[#f `(inject #f Boolean)]
282-
[`(and ,e1 ,e2) (let ([gen (gensym)])
283-
`(let ([,gen ,((cast-insert) e1)])
284-
(if (eq? ,gen (inject #f Boolean))
285-
,gen
286-
,((cast-insert) e2))))]
287-
[`(not ,e) `(inject (not (project ,((cast-insert) e) Boolean)) Boolean)]
288-
[`(eq? ,e1 ,e2) `(inject (eq? ,((cast-insert) e1),((cast-insert) e2)) Boolean)]
289-
[`(if ,eq ,et ,ef) `(if (eq? ,((cast-insert) eq) (inject #f Boolean)) ,((cast-insert) ef) ,((cast-insert) et))]
290-
[`(vector ,es ...) `(inject (vector ,@(map (cast-insert) es)) (Vector ,@(map (lambda (x) 'Any) es)))]
291-
[`(vector-ref ,e1 ,n) `(vector-ref (project ,((cast-insert) e1) (Vectorof Any)) ,n)]
292-
[`(vector-set! ,e1 ,n ,e2) `(inject (vector-set! (project ,((cast-insert) e1) (Vectorof Any)) ,n ,((cast-insert) e2)) Void)]
293-
[`(void) `(inject (void) Void)] ; ???
294-
[`(lambda (,xs ...) ,e) `(inject (lambda: (,@(map (lambda (x) `[,x : Any]) xs)) : Any ,((cast-insert) e)) (,@(map (lambda (x) 'Any) xs) -> Any))]
295-
[`(app ,e ,es ...) `(app (project ,((cast-insert) e) (,@(map (lambda (x) 'Any) es) -> Any)) ,@(map (cast-insert) es))]
296-
[`(define (,f ,xs ...) ,e) `(define (,f ,@(map (lambda (x) `[,x : Any]) xs)) : Any ,((cast-insert) e))]
297-
[`(program ,ds ... ,e) `(program ,@(map (cast-insert) ds) ,((cast-insert) e))])))
294+
[`(and ,e1 ,e2)
295+
(let ([gen (gensym)])
296+
`(let ([,gen ,((cast-insert) e1)])
297+
(if (eq? ,gen (inject #f Boolean))
298+
,gen
299+
,((cast-insert) e2))))]
300+
[`(not ,e)
301+
`(inject (not (project ,((cast-insert) e) Boolean)) Boolean)]
302+
[`(eq? ,e1 ,e2)
303+
`(inject (eq? ,((cast-insert) e1)
304+
,((cast-insert) e2))
305+
Boolean)]
306+
[`(if ,eq ,et ,ef)
307+
`(if (eq? ,((cast-insert) eq) (inject #f Boolean))
308+
,((cast-insert) ef)
309+
,((cast-insert) et))]
310+
[`(vector ,es ...)
311+
`(inject (vector ,@(map (cast-insert) es))
312+
(Vector ,@(map (lambda (x) 'Any) es)))]
313+
[`(vector-ref ,e1 ,e2)
314+
`(vector-ref (project ,((cast-insert) e1) (Vectorof Any))
315+
(project ,((cast-insert) e2) Integer))]
316+
[`(vector-set! ,e1 ,e2 ,e3)
317+
`(inject (vector-set! (project ,((cast-insert) e1) (Vectorof Any))
318+
(project ,((cast-insert) e2) Integer)
319+
,((cast-insert) e3))
320+
Void)]
321+
[`(void) `(inject (void) Void)]
322+
[`(lambda (,xs ...) ,e)
323+
`(inject (lambda: (,@(map (lambda (x) `[,x : Any]) xs)) : Any
324+
,((cast-insert) e))
325+
(,@(map (lambda (x) 'Any) xs) -> Any))]
326+
[`(app ,e ,es ...)
327+
`(app (project ,((cast-insert) e)
328+
(,@(map (lambda (x) 'Any) es) -> Any))
329+
,@(map (cast-insert) es))]
330+
[`(define (,f ,xs ...) ,e)
331+
`(define (,f ,@(map (lambda (x) `[,x : Any]) xs)) : Any
332+
,((cast-insert) e))]
333+
[`(program ,ds ... ,e)
334+
`(program ,@(map (cast-insert) ds) ,((cast-insert) e))])))
298335

299336

300337

functions.rkt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@
111111
[else e])]
112112
[`(let ([,x ,e]) ,body)
113113
`(let ([,x ,(recur e)]) ,(recur body))]
114+
[`(void)
115+
`(void)]
114116
[#t #t]
115117
[#f #f]
116118
[`(if ,cnd ,thn ,els)

schedule.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ April
3333
11 Lecture topic: tail call opt. (Michael)
3434
13 Lecture topic: set! (Chris)
3535

36-
37-
36+
18 Lecture topic:
37+
20 Lecture topic:
3838

3939
Student Projects
4040

0 commit comments

Comments
 (0)