我们正在使用方案版本r5rs尝试检查它指向的类型的过程指针。
我们使用以下方法创建了一个对象:
(define (%macro name exp env)
(define (set-exp new_exp) (set! exp new_exp))
(define (set-env new_env) (set! env new_env))
(define (set-name new_name) (set! name new_name))
(define (%dispatch call)
(cond
((eq? call 'get-exp) exp)
((eq? call 'get-env) env)
((eq? call 'get-name) name)
((eq? call 'set-exp) set-exp)
((eq? call 'set-env) set-env)
((eq? call 'set-name) set-name)
))
%dispatch
)
然后我们想检查过程引用以确定它是否指向代码的另一部分中的dispatch函数:
(define (macro? exp)
(eq? %macro exp)
)
这似乎不起作用,如果指针指向宏对象(实际上是调度程序),我们如何正确检查指针?
非常感谢任何帮助:)
答案 0 :(得分:3)
也许为你的对象添加一个响应'macro?的方法。就Java程序员而言:避免使用instanceof调用。如果所有对象都遵循实现宏的通用协议?方法,会解决问题吗?
在像Racket这样功能更强大的语言中,使用structure type property也可以。由于你是故意的,所以你的选择更有限。