定义返回计划中表达式运算符的宏?

问题描述 投票:0回答:1

我正在寻找这样的功能:

(op (+ 1 2))
; +

我似乎一辈子都想不通如何使用define-macro来做到这一点。有帮助吗?

谢谢,

编辑:

这特别令人困惑,因为我可以这样做:

(car '(+ 1 2))
; +

但是如果我这样做:

(define-macro (op expr)
    (car expr))

(op '(+ 1 2))

不起作用。

scheme
1个回答
0
投票

Lisp宏不是简单的文本替换宏。对宏表格进行评估以产生一种新表格,以替代原始的宏调用。

op的目标不是评估(car expr),而是产生form (car expr),在宏扩展发生后,由REPL对其进行评估。可以使用list

执行此操作
(define-macro (op expr)
  (list 'car expr))

或使用半引号

(define-macro (op expr)
  `(car ,expr))
© www.soinside.com 2019 - 2024. All rights reserved.