打印符号并使用宏进行评估



我正在尝试编写一些代码来打印符号,并评估球拍中与之相关的函数

我已经在运行时使用eval实现了这一点,但我认为在不使用eval的情况下也应该可以实现。

Eval版本:

(define ns (namespace-anchor->namespace a))
(define (deco-display fun-sym bstr)
(display (symbol->string fun-sym))
(display ": ")
(display (eval `(,fun-sym ,bstr) ns)))

示例用法:

(define (extract-id bstr)  (subbytes bstr  0  8 ))
(deco-display 'extract-id   bstr)

我试过了:

(define (xxx) (display "asdas"))
(define-syntax (print-and-do stx)
(syntax-case stx ()
[(_ p) #`(begin (display #'p) (newline) (p))]))

但结果并不是我所期望的

(print-and-do xxx)
.#<syntax:interactions from an unsaved editor:5:16 xxx>
asdas

感谢人们的评论和更多的阅读,我完成了3个工作版本:

(define-syntax (print-and-do-v1 stx)
(syntax-case stx ()
[(_ p) #'(begin (display (syntax->datum #'p)) (newline) (p))]))
(define-syntax (print-and-do-v2 stx)
(syntax-case stx ()
[(_ p) #'(begin (display 'p) (newline) (p))]))
(define-syntax-rule (print-and-do-v3 p)
(begin (display 'p) (newline) (p)))

最新更新