;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-beginner-reader.ss" "lang")((modname lec4) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ()))) ;; A snake is ;; (make-snake sym num sym) (define-struct snake (name weight food)) ;; snake-skinny? : snake -> boolean ;; To determine whether s is strictly less than 10 lbs ;(define (snake-skinny? s) ; ... (snake-name s) ... (snake-weight s) ... (snake-food s) ...) (define (snake-skinny? s) (< (snake-weight s) 10)) (check-expect (snake-skinny? (make-snake 'Slinky 10 'rats)) false) (check-expect (snake-skinny? (make-snake 'Slimey 8 'grass)) true) (check-expect (snake-skinny? (make-snake 'Hefty 25 'cows)) false) ;; feed-snake : snake -> snake ;; To feed s 5 lbs of food ;(define (feed-snake s) ; .... (snake-name s) ... (snake-weight s) ... (snake-food s) ...) (define (feed-snake s) (make-snake (snake-name s) (+ 5 (snake-weight s)) (snake-food s))) (check-expect (feed-snake (make-snake 'Slinky 10 'rats)) (make-snake 'Slinky 15 'rats)) (check-expect (feed-snake (make-snake 'Slimey 8 'grass)) (make-snake 'Slimey 13 'grass)) ;; A dillo is ;; (make-dillo num bool) (define-struct dillo (weight alive?)) ;; run-over-with-car : dillo -> dillo ;; To (sadly) kill d ;(define (run-over-with-car d) ; ... (dillo-weight d) ... (dillo-alive? d) ...) (define (run-over-with-car d) (make-dillo (dillo-weight d) false)) (check-expect (run-over-with-car (make-dillo 2 true)) (make-dillo 2 false)) (check-expect (run-over-with-car (make-dillo 8 false)) (make-dillo 8 false)) ;; feed-dillo : dillo -> dillo ;; To feed d 2 lds of food, if d is alive? ;(define (feed-dillo d) ; .... (dillo-weight d) .... (dillo-alive? d) ...) (define (feed-dillo d) (cond [(dillo-alive? d) (make-dillo (+ 2 (dillo-weight d)) true)] [else d])) (check-expect (feed-dillo (make-dillo 2 true)) (make-dillo 4 true)) (check-expect (feed-dillo (make-dillo 2 false)) (make-dillo 2 false))