SchemeTraceDefine

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
<code id="5ba48fcdb46e0">
(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 (f input)])
        (print (make-string indent #\space) r)
        (set! indent (- indent 1))
        r
      )
    )
   )
  )
)

(trace-define fak-rek
  (lambda (n)
    (if (= n 0)
        1
        (* n (fak-rek (- n 1))))))

</code>
<run id="5ba48fcdb474f">
(fak-rek 5)
</run>