(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)))
它运行,但是给了我一个输出。任何理由为什么它不会给我输出?
edit- (meal-time? gorilla 10)
告诉我它需要一只动物,但是给了10只。
答案 0 :(得分:2)
你的meal-time?
函数将两个动物作为参数(因为你在两个参数上使用animal-
访问器函数),但你用动物和数字来调用它。因此,您会收到一条错误消息,告诉您第二个参数应该是动物。
如果你用两只动物作为参数调用你的函数,你就不会再出现错误了。你会得到#f
。你的功能是:它检查第一只动物的种类是否等于第二只动物的晚餐时间。由于没有名称是数字的物种,因此永远不会成真。