0

私がこのコードに対して(visit-doctor suppertime)を行うとき:

(define (visit-doctor name)
  (if (equal? name 'suppertime) (end-session)
  ((write-line (list 'hello name))
  (write-line '(what seems to be the trouble?))
  (doctor-driver-loop name initial-earlier-response))))

(define (end-session) (write-line '(the doctor is done seeing patients today)))

それは私にこのエラーを与えます:

アプリケーション:手順ではありません。与えられた引数に適用できるプロシージャが必要です:#引数...:##

4

1 に答える 1

3

問題は、コードのブロックをグループ化するために角かっこを使用しようとしていることです。
スキームはそれをしません。

あなたのelseブランチは

((write-line (list 'hello name))
 (write-line '(what seems to be the trouble?))
 (doctor-driver-loop name initial-earlier-response))

これは3つの要素のリストです。

そのリストの最初の要素はプロシージャに期待され、それは他の2つの要素に適用され(write-line (list 'hello name))ますが、プロシージャを取得しないと評価すると、を取得します#<void>

修正は、以下を使用してシーケンスすることbeginです。

(begin (write-line (list 'hello name))
       (write-line '(what seems to be the trouble?))
       (doctor-driver-loop name initial-earlier-response))
于 2013-02-28T09:00:06.590 に答える