1
(define-struct animal (name species age breakfasthour dinnerhour))
(define-struct attendant (name a1 a2 a3))


(define gorilla (make-animal "Koko" "Gorilla" 4 "8" "10"))
(define bat (make-animal "Bruce" "Bat" 1 "23" "5"))
(define mandrill (make-animal "Manny" "Mandrill" 5 "8" "7"))
(define crocodile (make-animal "Swampy" "Crocodile" 1 "10" "8"))
(define ocelot (make-animal "Ozzy" "Ocelot" 7 "7" "17"))
(define capybara (make-animal "Capy" "Capybara" 4 "6" "8"))
(define potto (make-animal "Spot" "Potto" 2 "2" "6"))
(define tapir (make-animal "Stripey" "Tapir" 3 "10" "6"))
(define vulture (make-animal "Beaky" "Vulture" 10 "9" "6"))


(define attendant1 (make-attendant "Dave" gorilla bat mandrill))
(define attendant2 (make-attendant "John" crocodile ocelot capybara))
(define attendant3 (make-attendant "Joe" potto tapir vulture))

動物を取り、その食事時間かどうかを返す関数が必要です。ゴリラを食べると、夕食時間は 10 になります。これが私が行ったことです。上記の数字の引用符は無視してください。

(define (meal-time? e1 e2)
  (string=? (animal-species e1)
            (animal-dinnerhour e2)))

実行されますが、出力が得られません。出力が得られない理由は何ですか?

編集(meal-time? gorilla 10)-動物を期待していると私に言いますが、10が与えられました.

4

1 に答える 1

2

関数は 2 匹の動物を引数として取ります (両方の引数でアクセサ関数meal-time?を使用するためanimal-) が、動物と数字を使用して呼び出します。したがって、2 番目の引数は動物でなければならないというエラー メッセージが表示されます。

引数として 2 匹の動物を指定して関数を呼び出すと、エラーは発生しなくなります。あなたは得るでしょう#f。あなたの関数は何をしますか: 最初の動物の種が 2 番目の動物の夕食時間と等しいかどうかをチェックします。名前が数字である種は存在しないので、それは決して真実ではありません。

于 2013-01-29T02:35:12.620 に答える