|
CSE Home |
About Us |
Search |
Contact Info |
Here are the examples Jonah gave in section 5/11. There's one use of dysfun-stmt->scheme-expr, one use of dysfun-stmts->scheme-exprs, one use of dysfun-func->scheme-lambda, and a few of unbound-vars. He also cleaned up the indentation on the output so it's more readable than what DrScheme prints out. (This is just to help you read the examples; you do not need to do anything special about formating the code you generate.) Note that the while-loop function names are randomized, so they'll actually be different each time you run things.
;;;Example 0
> (define testcase '(5 / 2 * f(b) + g(a,b,c) * h(f(5 + 6,i())) + x(y(z()))))
> (dysfun-expr->scheme-expr testcase)
=> (+ (* (/ 5 2) (f b)) (* (g a b c) (h (f (+ 5 6) (i)))) (x (y (z))))
;;; Example 1
> (define prog1 '(
if (x + 1 < y)
{
y := y - 1 !
x := x + 1 !
}
))
> (unbound-vars '() prog1)
=> (y x)
> (dysfun-stmt->scheme-expr prog1)
=> (if (< (+ x 1) y)
(begin
(set! y (- y 1))
(set! x (+ x 1))))
;;; Example 2
> (define prog2 '(
n := 12 !
c := 0 !
while (n > 0)
{
c := c + n !
n := n - 1 !
} !
))
> (unbound-vars '() prog2)
=> (c n)
> (dysfun-stmts->scheme-exprs prog2)
=> ((set! n 12)
(set! c 0)
(letrec
((g49 (lambda ()
(if (> n 0)
(begin
(set! c (+ c n))
(set! n (- n 1))
(g49))))))
(g49)))
;;; Example 3
> (define prog3 '(
func div (n, d) {
r := n !
q := 0 !
if (d = 0)
{
return 0 !
} !
while (r >= d)
{
q := q + 1 !
r := r - d !
} !
return q !
}
))
> (unbound-vars '() prog3)
=> (div n r d q)
;;; above is correct, but following is more like how you will use it:
> (unbound-vars '(n d) (cdddr prog3))
=> (r q)
> (dysfun-func->scheme-lambda prog3)
=> (lambda (n d)
(let/cc
return
(let ((r (void)) (q (void)))
(set! r n)
(set! q 0)
(if (= d 0) (begin (return 0)))
(letrec
((g44 (lambda ()
(if (>= r d)
(begin
(set! q (+ q 1))
(set! r (- r d))
(g44))))))
(g44))
(return q))))
|
Computer Science & Engineering University of Washington Box 352350 Seattle, WA 98195-2350 (206) 543-1695 voice, (206) 543-2969 FAX [comments to cse341-webmaster at cs.washington.edu] | |