Joel Borggrén-Franck wrote:
Is there a way to read from pp without creating a port first?
(##decompile (lambda (y) (* y y))) (lambda (y) (* y y)) (caddr (##decompile (lambda (y) (* y y)))) (* y y)
BTW be careful: macros using (begin ..) to output multiple forms will not give what you want since the current interpreter strips the begin during parsing time:
(caddr (##decompile (lambda () (begin (form1) (* y y))))) (form1)
So you want something like:
(define (macro-expand-decompile-thunk thunk) (let ((code (cddr (##decompile thunk)))) (if (null? (cdr code)) (car code) `(begin ,@code)))) (macro-expand-decompile-thunk (lambda () (* y y))) (* y y) (macro-expand-decompile-thunk (lambda () (begin (form1) (* y y)))) (begin (form1) (* y y))
I played around with with-output-to-string first but that just gave me a headache.
pp doesn't print to current-output-port by default.
(with-output-to-string "" (lambda () (pp "fun"))) "fun" "" (with-output-to-string "" (lambda () (pp "fun" (current-output-port)))) "\"fun\"\n"
Christian.