制作"derived"标识符的最干净方法?



对于方案宏制造"派生"标识符非常普遍,例如如何定义记录类型的foo(使用R6RS语法记录API)将在默认情况下定义一个称为make-foo的构造函数。我想在自己的宏观上做类似的事情,但是在标准库中找不到任何干净的方式。我最终写了这个:

(define (identifier-add-prefix identifier prefix)
  (datum->syntax identifier
                 (string->symbol (string-append prefix
                                                (symbol->string (syntax->datum identifier)))))

i将语法对象(假定为标识符)转换为基准,将该符号转换为字符串,用前缀preded制作新字符串,将该字符串转换为符号,然后最终将该符号转换为一个符号与identifier相同的句法环境中的标识符。

这起作用,但似乎是回旋处和混乱。是否有更清洁的或更多的惯用方法来执行此操作?

尽管它可能不是卫生的宏,但我想您可以使用这样的定义 - 同源(在鸡肉方案中)。对于鸡肉计划,宏的文档在这里。同样,这个问题还阐明了鸡肉方案宏。最后,我不知道这是否是解决问题的惯用方法。

(use format)
(use srfi-13)
(define-syntax recgen
  (lambda (expr inject compare)
    `(define (,(string->symbol (string-append "make-" (cadr expr))) ) (format #t "called"))))
#> (recgen "bar")
#> (make-bar)
called

上面的单个定义可以更改为定义getters/setters或其他与记录交互的方法的(begin ...)。

相关内容

  • 没有找到相关文章

最新更新