;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Template practice ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; An Answer is one of: ;; - Number ;; - "error" (define (answer-temp ans) (cond [(number? ans) ...] [(string? ans) ...])) ;----------------------------------------------------------- (define-struct grams (kilo)) ;; A Weight (weight measurement) is one of: ;; -- Number ;; -- (make-grams Number) ;; interp: a plain number represents American pounds, ;; and (make-grams n) represents kilograms. ;; Create a template for the function measured that takes ;; a Weight, i.e., measured : Weight -> Boolean (define (measured w) (cond [(number? w) ...] [(grams? w) ...(grams-kilo w)... ])) ;----------------------------------------------------------- (define-struct dr (first last)) (define-struct mr (first last)) (define-struct ms (first last)) ;; A Customer is one of: ;; - (make-dr String String) ;; - (make-mr String String) ;; - (make-ms String String) (define (cust-temp c) (cond [(dr? c) ... (dr-first c) ... (dr-last c) ...] [(mr? c) ... (mr-first c) ... (mr-last c) ...] [(ms? c) ... (ms-first c) ... (ms-last c) ...])) ;----------------------------------------------------------- (define-struct nam (first last)) ;; A Name is a (make-name String String) (define-struct intern (wage hrs/wk name)) (define-struct fulltime (salary name)) ;; An Employee is one of: ;; - (make-intern Number Number Name) ;; - (make-fulltime Number Name) (define (emp-temp emp) (cond [(intern? emp) (... (intern-wage emp) ... (intern-hrs/wk emp) ... (intern-name emp) ...)] [(fulltime? emp) ... (fulltime-salary emp) ... (fulltime-name emp) ...])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; RECURSION! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-struct shell (contents)) ;; An RD is one of: ;; - 'solid ;; - (make-shell RD) #;(define (rd-temp rd) (cond [(symbol? rd) ...] [else ... (rd-temp (shell-contents rd)) ...])) ;; dolls-inside : RD -> Number ;; count number of dolls inside rd (define (dolls-inside rd) (cond [(symbol? rd) 0] [else (+ 1 (dolls-inside (shell-contents rd)))])) (check-expect (dolls-inside 'solid) 0) (check-expect (dolls-inside (make-shell 'solid)) 1) (check-expect (dolls-inside (make-shell (make-shell 'solid))) 2) (check-expect (dolls-inside (make-shell (make-shell (make-shell 'solid)))) 3)