[英]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:申請:不是程序; 期望一個可以應用於參數的過程
給出:#f
參數...:
所以,我想知道是否有人可以幫助我解決問題。 編輯
我懷疑有一個語法錯誤,如上面的誤用或未對齊的paranthesis但我找不到導致錯誤的確切位置。
使用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語言只有一個名稱空間用於所有綁定,因此您不能使用相同名稱的過程和變量,因為命名過程將占用相同的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.