簡體   English   中英

球拍宏,打印變量名稱及其值的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM