DrRacket:application: 不是过程 R5RS 语言错误
DrRacket:application: not a procedure Error on R5RS language
这是我第一天学习 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))
这个片段是相当大的项目的一部分。因此,我只分享相关部分。在项目内部,调用此 apply-method
过程时。我在以 let
表达式开头的行上出错。报错信息如下:
objsys.scm:53:2: application: not a procedure; expected a procedure
that can be applied to arguments
given: #f
arguments...:
所以,我想知道是否有任何人可以帮助我解决问题。
编辑
我怀疑上面的括号使用不当或未对齐等语法错误,但我找不到导致错误的确切位置。
当您使用 apply-method
时,in-object
的值为 #f
。当 apply-method
尝试做 (get-method message in-object)
get-method
然后应用 (in-object message)
变成 (#f 'some-unknown-message)
因为 #f
是 而不是 过程球拍在将其视为一个过程时遇到问题,并以错误告终,告诉您在应用过程中给定值 #f
不是过程。
由于您使用的是 racket,也许您应该启动调试器并在 get-method
上放置一个断点,然后您就会看到它。请注意,Scheme 和 Racket 语言对于所有绑定只有一个名称空间,因此您不能拥有同名的过程和变量,因为命名过程将占用完全相同的变量。
这是我第一天学习 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))
这个片段是相当大的项目的一部分。因此,我只分享相关部分。在项目内部,调用此 apply-method
过程时。我在以 let
表达式开头的行上出错。报错信息如下:
objsys.scm:53:2: application: not a procedure; expected a procedure that can be applied to arguments
given: #f
arguments...:
所以,我想知道是否有任何人可以帮助我解决问题。 编辑
我怀疑上面的括号使用不当或未对齐等语法错误,但我找不到导致错误的确切位置。
当您使用 apply-method
时,in-object
的值为 #f
。当 apply-method
尝试做 (get-method message in-object)
get-method
然后应用 (in-object message)
变成 (#f 'some-unknown-message)
因为 #f
是 而不是 过程球拍在将其视为一个过程时遇到问题,并以错误告终,告诉您在应用过程中给定值 #f
不是过程。
由于您使用的是 racket,也许您应该启动调试器并在 get-method
上放置一个断点,然后您就会看到它。请注意,Scheme 和 Racket 语言对于所有绑定只有一个名称空间,因此您不能拥有同名的过程和变量,因为命名过程将占用完全相同的变量。