Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Exercise 3:
- ; Design a function widen-river to make every merge point wider in a river network
- ; by a given amount.
- ; You may omit the purpose statement.
- (define RIVER-S1 (make-stream 3))
- (define RIVER-S2 (make-stream 5))
- (define RIVER-S3 (make-stream 1))
- (define RIVER-S4 (make-stream 6))
- (define RIVER-S5 (make-stream 2))
- (define RIVER-M1 (make-merge 50 RIVER-S1 RIVER-S2))
- (define RIVER-M2 (make-merge 80 RIVER-S3 RIVER-M1))
- (define RIVER-M3 (make-merge 50 RIVER-S4 RIVER-S5))
- (define RIVER-M4 (make-merge 100 RIVER-M2 RIVER-M3))
- ; S1:3 S2:5
- ; \ /
- ; M1:50 S3:1 S4:6 S5:2
- ; \ / \ /
- ; M2:80 M3:50
- ; \ /
- ; M4:100
- ;
- ;; widen-river : River Number -> River
- ;; updates each merge point in a river network by the given number
- (check-expect (widen-river RIVER-S1 5) RIVER-S1)
- (check-expect (widen-river RIVER-M1 10) (make-merge 60 RIVER-S1 RIVER-S2))
- (check-expect (widen-river RIVER-M4 2) (make-merge 102
- (make-merge 82 RIVER-S3 (make-merge 52 RIVER-S1 RIVER-S2))
- (make-merge 52 RIVER-S4 RIVER-S5)))
- (define (widen-river r n)
- (cond [(stream? r) r]
- [(merge? r) (make-merge
- (+ (merge-width r) n)
- (widen-river (merge-left r) n)
- (widen-river (merge-rightrp) n))]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement