【发布时间】:2021-06-11 00:49:58
【问题描述】:
我在 Guile Scheme 工作。我正在制作宏,但我发现我在输出中重复了很多样板。 我对 Scheme 很陌生,所以如果有比语法案例更好的方法来解决这个问题,我愿意接受建议。
在这个宏中,输入只有一个区别,“set”与“setconst”,输出只有一个区别,“elementReference”与“stringValue”。我尝试使用带有#, 的#` 来取消引用,但我收到诸如“语法:表单中缺少省略号(语法集)”之类的错误消息。理想情况下,我想在我的宏中放置一些方案代码来区分 set 和 setconst,并相应地更改输出,但正如我所说,这是新的,如果有更好的方法来获得我的结果,我会开放。
这是我的代码:
(define-syntax assign
(lambda (stx)
(syntax-case stx (then)
((assign aname then target (set to from) ...) #'(assignments (name aname)
(label aname)
(locationX 50)
(locationY 50)
((assignmentItems
(operator Assign)
(assignToReference to)
(value (elementReference from))) ...)
(connector (targetReference target))))
((assign aname then target (setconst to from) ...) #'(assignments (name aname)
(label aname)
(locationX 50)
(locationY 50)
((assignmentItems
(operator Assign)
(assignToReference to)
(value (stringValue from))) ...)
(connector (targetReference target))))
)))
【问题讨论】: