![]() |
![]() |
|
Due
05 (Tue); hardcopy not 'til Oct.12 (the next in-person lecture).
For this homework:
Reading: §6.6, and §10.1–10.3.1.
(Additional recommended, but not required, background reading: all of Chpt.6, and §10.3.
Additional, non-required, challenge-reading: § 10.5.)
All problems are to be written in Racket. Do not call any of the following functions:
Your name and the assignment-number must be in a comment at the start of the file All functions/data must include the appropriate steps1 of the-design-recipe.html. In particular, test cases alone might be worth 40-50% of the credit for a function. Have enough test cases to cover different corner cases; often 2–3 can suffice.
Remember: We can't re-assign to variables, in functional programming. So we won't have a counter which we increment, like you might in your imperative-programming class. Instead, be sure to follow the design recipe, and after copying the template, think about the inventory-with-values (assuming we call our parameters “threshold” and “nums”): if we call count-bigs with the particular inputs (count-bigs 3 (cons 10 (cons 2 (cons 5 empty)))), what is…Fill in each blank with a particular number, or list-of-numbers. Then, ask yourself: Starting with those pieces of info, how do I assemble them to get my desired result of 2?
- threshold =
- nums =
- (first nums) =
- (rest nums) =
- (count-bigs threshold (rest nums)) =
You don't need to include the above in your answer — it's just to remind you of what you do, for the “inventory-with-values” step of the design-recipe, #6. If you get stuck on any of the problems below, make sure you didn't skip this step; it's the one that can really make things click!
(check-expect (map-sqr empty) empty) (check-expect (map-sqr (cons 7 empty)) (cons 49 empty)) (check-expect (map-sqr (cons 9 (cons 7 empty))) (cons 81 (cons 49 empty))) |
Copy your hw04(structs) racket file to one that we'll use for this one.
Add a very noticeable dividing-line (say, 80 ;s)
between old code and the new.
Note: Your test cases can call our already-tested move-truck, which in turn suggests your code should! call it as well.
Note: The code for this will follow directly from the template. Its return value happens to be a list; we have seen that both in lecture's tee (triple-every-even), and map-sqr above.
; keep-on-screen-trucks : list-of-trucks -> list-of-trucks ; Return a list containing only those trucks are not off-screen. |
Write the function replenish-truck : list-of-trucks -> list-of-trucks,
which sometimes adds new trucks to the given list.
You can use whatever criterion you like,
but I recommend:
If a list's length falls below some threshold,
then add (exactly one) new truck.
(You can call length : list -> number;
we wrote my-length
in class,
but length
is also built-in.)
Note that you can, if you want, create new trucks with some random attributes; see the built-in function random. … However, this makes unit-testing problematic, since you don't exactly know the expected result2. So for this problem, your tests might instead sometimes only check that the length of the result is as expected. (Of course, if you do know the exact expected result for certain inputs -- e.g. when the list is already longer than some threshold -- then do check for that full result.)
Write trucks-collide-frog?, which determines whether a frog overlaps with any truck in a list-of-truck. Of course, you'll call last homework's truck-collide-frog? as a helper.
Define a world
structure which contains
one frog,
one prince(ss),
and a list of trucks
As usual for our data-definitions, make examples of the data (at least two).
very firstbackground-image that gets passed to other draw-… functions.
All the above should have their tests, as well as signatures and (brief) purpose statements.
Only after all tests pass, add
(require 2htdp/universe) (big-bang some-initial-world [on-key world-handle-key] [on-tick update-world] [to-draw draw-world] [stop-when game-over?] ) |
Or, in racket, see check-random!
↩This page licensed CC-BY 4.0 Ian Barland Page last generated | Please mail any suggestions (incl. typos, broken links) to ibarland ![]() |