[英]Racket Macro, Print list of variable names and their values
我有這個宏:
(define-syntax inspect
(syntax-rules ()
[(_ x) (printf "~a is: ~a\n" 'x x)]))
像這樣工作:
(let ([x 2]) (inspect x))
>> x is: 2
但是我想做的就是擴展它,以便
(_ x ...)
並遍歷提供的各種值,並相應地打印出它們的變量名和值。
即
(let ([x 2] [y 3]) (inspect x y))
>> x is: 2
y is: 3
我在這部分上有些卡住。
例如,使用以下內容:
(define-syntax (inspect stx)
(datum->syntax
stx
(for ([i (cdr (syntax->list stx))])
(printf "~a is: ~a" (syntax->datum i) i))))
我不確定如何在最后一行獲得i的值。
任何幫助表示贊賞。
謝謝。
不需要兩個模式的規則-您可以使用begin
來完成整個操作:
(define-syntax-rule (inspect x ...)
(begin (printf "~a is: ~a\n" 'x x) ...))
這是一種解決方案:
(define-syntax inspect
(syntax-rules ()
[(_ x) (printf "~a is: ~a\n" 'x x)]
[(_ x y ...) (begin (inspect x) (inspect y ...))]))
請注意,子句的順序很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.