检查类型的过程参考?

时间:2012-02-07 14:19:27

标签: oop scheme racket

我们正在使用方案版本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)
  )

这似乎不起作用,如果指针指向宏对象(实际上是调度程序),我们如何正确检查指针?

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:3)

也许为你的对象添加一个响应'macro?的方法。就Java程序员而言:避免使用instanceof调用。如果所有对象都遵循实现宏的通用协议?方法,会解决问题吗?

在像Racket这样功能更强大的语言中,使用structure type property也可以。由于你是故意的,所以你的选择更有限。