Oop 检查类型的过程参考?

Oop 检查类型的过程参考?,oop,scheme,racket,Oop,Scheme,Racket,我们正在使用scheme版本R5R,试图检查过程指针所指向的类型 我们使用以下方法创建了一个对象: (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

我们正在使用scheme版本R5R,试图检查过程指针所指向的类型

我们使用以下方法创建了一个对象:

(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
)
然后,我们要检查一个过程引用,以确定它是否指向代码另一部分中的分派函数:

(define (macro? exp)
  (eq? %macro exp)
  )
这似乎不起作用,我们如何正确地检查指针是否指向宏对象(实际上是分派过程)


非常感谢您的帮助:)

也许可以为您的对象添加一个响应“宏”的方法?。对于Java程序员来说:避免instanceof调用。如果所有对象都遵循一个公共协议,比如实现宏?方法,这能解决问题吗


在更具特色的语言(如full Racket)中,使用a也可以。由于您有意使用R5R,因此您的选项更加有限。

也许可以向您的对象添加一个响应“宏”的方法?。对于Java程序员来说:避免instanceof调用。如果所有对象都遵循一个公共协议,比如实现宏?方法,这能解决问题吗


在更具特色的语言(如full Racket)中,使用a也可以。由于您有意使用r5rs,因此您的选择更加有限。

谢谢您的回复。我担心我不能使用完整的球拍,因为我的大学目前限制我们使用R5R。“宏”将不幸地解决它,因为发送给“宏”的所有对象都无法响应此类查询。Hmmm。你能让你所有的对象都支持一个返回构造函数的“type”方法吗?您可以更改的内容有哪些限制?谢谢您的回复。我担心我不能使用完整的球拍,因为我的大学目前限制我们使用R5R。“宏”将不幸地解决它,因为发送给“宏”的所有对象都无法响应此类查询。Hmmm。你能让你所有的对象都支持一个返回构造函数的“type”方法吗?您可以更改的内容有哪些限制?