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.