首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DrRacket:应用程序:不是R5RS语言上的过程错误

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

Stack Overflow用户
提问于 2016-12-04 20:06:07
回答 1查看 149关注 0票数 1

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

代码语言:javascript
复制
;; 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:应用程序:不是一个过程,而是一个可以应用于参数的过程 给予:#f 论点.

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

我怀疑上面有一个语法错误,比如误用或不对齐的偏执,但我找不到引起错误的确切位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-04 21:51:15

当您使用apply-method时,in-object的值是#f。当apply-method尝试执行(get-method message in-object) get-method时,然后应用(in-object message)将其转化为(#f 'some-unknown-message),并且由于#f而不是,过程racket在将其作为处理时遇到问题,并最终导致一个错误,告诉您在应用程序期间,给定值#f不是一个过程。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40963048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档