Scheme DrRacket:应用程序:不是R5RS语言上的过程错误

Scheme DrRacket:应用程序:不是R5RS语言上的过程错误,scheme,racket,r5rs,Scheme,Racket,R5rs,这是我在Dr.Racket和R5RS语言上的第一天。我正在尝试修改下面共享的现有代码 ;; This is an internal helper procedure. ;; - it gets the method out of "in-object" ;; - it invokes the method, passing "for-object" as the ;; "self" for the method. ;;

这是我在
Dr.Racket
R5RS
语言上的第一天。我正在尝试修改下面共享的现有代码

;; This is an internal helper procedure.
;;  - it gets the method out of "in-object"
;;  - it invokes the method, passing "for-object" as the
;;    "self" for the method.                    
;;                  
(define (apply-method in-object for-object message args)
  (let ((method (get-method message in-object)))
    (cond ((method? method)                 
           (apply method for-object args))
          ((eq? in-object for-object)
       (display method)                 
           (error "No method for" message 'in
          (safe-ask 'UNNAMED-OBJECT
                in-object 'NAME)))
          (else (error "Can't delegate" message
                       "from" (safe-ask 'UNNAMED-OBJECT
                    for-object 'NAME)
               "to" (safe-ask 'UNNAMED-OBJECT
                      in-object 'NAME))))))


(define (get-method message object) ; single-inheritance
  (object message))
这个片段是相当大的项目的一部分。因此,我只分享相关部分。在项目内部,当调用此
应用方法
过程时。我在以
let
expression开头的行中出错。错误消息如下所示:

scm:53:2:应用程序:不是过程;需要一个程序吗 可应用于参数的值
给定:#f
论点…:

所以,我想知道是否有人能帮我解决这个问题。 编辑


我怀疑上面有语法错误,如误用或未对齐的偏执,但我找不到导致错误的确切位置。

当您使用
应用方法时,
在object
中的值是
\f
。当
应用方法
尝试执行
(在对象中获取方法消息)
获取方法
时,应用
(在对象消息中)
,该操作会变成
(#f'一些未知消息)
并且由于
#f
而不是一个过程争用器在将其视为一个过程时出现问题,并最终导致一个错误,告诉您在应用过程中给定的值
#f
不是一个过程


由于您使用的是racket,也许您应该启动调试器并在
get方法上设置一个断点,然后您就会看到它。请注意,Scheme和Racket语言对于所有绑定只有一个名称空间,因此您不能有同名的过程和变量,因为命名过程将占用同一个变量。

当您使用
apply method
时,object
的值为
\f
。当
应用方法
尝试执行
(在对象中获取方法消息)
获取方法
时,应用
(在对象消息中)
,该操作会变成
(#f'一些未知消息)
并且由于
#f
而不是一个过程争用器在将其视为一个过程时出现问题,并最终导致一个错误,告诉您在应用过程中给定的值
#f
不是一个过程


由于您使用的是racket,也许您应该启动调试器并在
get方法上设置一个断点,然后您就会看到它。请注意,Scheme和Racket语言对于所有绑定只有一个名称空间,因此不能有同名的过程和变量,因为命名过程将占用同一个变量。

问题似乎更多地在于使用
apply方法而不是其实现。在某个地方,它与对象
中的
一起应用,即
#f
。问题似乎更多地在于
应用方法的使用,而不是它的实现。在某些地方,它与对象
中的
一起应用,即
#f