SchemeTraceDefine
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
<code id="trace-define">
(define indent 0)
(define-macro (trace-define name expr)
`(define ,name (lambda input
(set! indent (+ indent 1))
(print (make-string indent #\space) (quote ,name) " " input)
(let ([f ,expr])
(let ([r (apply f input)])
(print (make-string indent #\space) r)
(set! indent (- indent 1))
r
)
)
)
)
)
</code>
<code id="5ba495e2702bd">
(trace-define fak-rek
(lambda (n)
(if (= n 0)
1
(* n (fak-rek (- n 1))))))
(trace-define fak-help
(lambda (n fak)
(if (= n 0)
fak
(fak-help (- n 1) (* n fak)))))
(trace-define fak-it
(lambda (n)
(fak-help n 1)))
</code>
<run id="5ba48fcdb474f">
(fak-rek 5)
(print "------")
(fak-it 5)
</run>