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
。