racket/collects/scribblings/reference/prog-steps.rkt
Eli Barzilay ac26fe7554 A ton of @scheme*' -> @racket*' and related updates.
Also, updates some of the mzlib files to point at `racket/*' libraries
rather than to `scheme/*' ones.
2011-06-25 04:08:47 -04:00

84 lines
2.5 KiB
Racket

(module prog-steps mzscheme
(require scribble/struct
scribble/decode
scribble/manual
scribble/scheme
mzlib/kw
mzlib/class
mzlib/for)
(provide prog-steps
prog-steps/cont
prog-steps/no-obj)
(define-syntax prog-steps/no-obj
(syntax-rules ()
[(_ [{def ...} prog] ...)
(*prog-steps
#f
#f
(list (racketblock0 def ...) ...)
(list (racketblock0 prog) ...))]))
(define-syntax prog-steps
(syntax-rules ()
[(_ [{obj ...} {def ...} prog] ...)
(*prog-steps
#f
(list (racketblock0 obj ...) ...)
(list (racketblock0 def ...) ...)
(list (racketblock0 prog) ...))]))
(define-syntax prog-steps/cont
(syntax-rules ()
[(_ [{obj ...} {def ...} prog] ...)
(*prog-steps
#t
(list (racketblock0 obj ...) ...)
(list (racketblock0 def ...) ...)
(list (racketblock0 prog) ...))]))
(define (to-flow e) (make-flow (list (make-paragraph (list e)))))
(define (*prog-steps cont? objs defs progs)
(make-table
'((valignment baseline baseline baseline baseline baseline baseline))
(apply
append
(for/list ([obj (or objs (in-naturals))]
[def defs]
[prog progs]
[i (in-naturals)])
(let ([l
(list
(list (to-flow " ")
(to-flow (if (and (or (positive? i)
cont?)
(not objs))
'rarr
" "))
(to-flow " ")
(to-flow "defined:")
(to-flow " ")
(make-flow (list def)))
(list (to-flow " ")
(to-flow " ")
(to-flow " ")
(to-flow "evaluate:")
(to-flow " ")
(make-flow (list prog))))])
(if objs
(cons (list
(to-flow " ")
(to-flow (if (or (positive? i)
cont?)
'rarr
" "))
(to-flow " ")
(to-flow "objects:")
(to-flow " ")
(make-flow (list obj)))
l)
l)))))))