【发布时间】:2019-05-03 06:50:01
【问题描述】:
我正在设计一种新语言,并想重新定义define 的程序形式,但也导出标准表达式形式。有没有办法我可以做到这一点?到目前为止,我有这个代码:
(define-syntax-rule (my-define (name args) body ...) ...)
(provide (rename-out [my-define define]) define)
但会生成错误“标识符已在:定义中提供(作为不同的绑定)”
【问题讨论】:
-
您不能以相同的名称导出两个绑定。不过,您可以使用不同的名称导出旧的
define。 -
虽然我怀疑这不是你真正想要的。如果我猜对了,您想要一个新的
define表单来覆盖某些行为,但要使用旧的行为? -
@AlexKnauth 如果我错了,请纠正我:我认为 Racket 有两种定义形式:一种绑定到 expr,另一种绑定到过程。我想重新定义其中一个并按原样导出另一个。我从你所说的猜测我基本上不能这样做并且必须重新定义一个组合的新表单来检查它是哪个表单然后进行相应的处理?
-
没错,
define有两种形式,但两者都与同一标识符define相关联,因此您必须处理这两种情况。请参阅下面的答案。
标签: racket