簡體   English   中英

DrRacket:應用程序:不是R5RS語言的過程錯誤

[英]DrRacket:application: not a procedure Error on R5RS language

這是我在Dr.RacketR5RS語言上的第一天。 我正在嘗試修改下面分享的現有代碼。

;; 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
參數...:

錯誤消息標題

所以,我想知道是否有人可以幫助我解決問題。 編輯

我懷疑有一個語法錯誤,如上面的誤用或未對齊的paranthesis但我找不到導致錯誤的確切位置。

使用apply-methodin-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語言只有一個名稱空間用於所有綁定,因此您不能使用相同名稱的過程和變量,因為命名過程將占用相同的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM