0

私は、医師が 5 人の患者だけを診察してからプログラムが終了するプログラムを作成しようとしています。現在、それは終わらず、次の患者を求め続けています。ドクター ドライバー ループ プロシージャの else を無視します。その手順でカウントするために1を追加しますが、毎回ゼロに戻り続けると思います。これを修正するにはどうすればよいですか?

(define count 0)

(define (new-patient counter)
  (if (= counter 5) (write-line 'doctor has seen 5 patients today so the day is now over)
    (visit-doctor (ask-patient-name))))

(define (doctor-driver-loop name earlier-responses)
  (newline)
 (write '**)
  (let ((user-response (read)))
   (cond ((equal? user-response '(goodbye))
         (write-line (list 'goodbye name))
         (write-line '(see you next week))
         (new-patient (+ 1 count)))
      (else (write-line (reply (responses-list earlier-responses user-response) user-response))
            (doctor-driver-loop name (responses-list earlier-responses user-response))))))

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

1 に答える 1

1

この行を置き換えてみてください:

(new-patient (+ 1 count))

次の 2 行を使用します。

(set! count (+ 1 count))
(new-patient count)

現在のコードでは、 の反復ごとに の値count常にdoctor-driver-loopゼロになります。これは、その値が更新されていないためです。パーツは を変更せず(+ 1 count)に に 1 を追加し、次に呼び出されると、再びゼロになります。count countdoctor-driver-loopcount

これは簡単な修正ですが、理想的な解決策ではないことに注意してください。まずcount、グローバル変数として定義しないでください。代わりに、初期値ゼロで渡され、new-patient処理される患者ごとに呼び出すときにインクリメントされるドライバー ループへのパラメーターである必要があります。

于 2013-02-28T01:09:26.017 に答える