2023w2-mt1:mt1-p5 exam solution

docx

School

University of British Columbia *

*We aren’t endorsed by this school

Course

110

Subject

Computer Science

Date

Feb 20, 2024

Type

docx

Pages

3

Uploaded by CorporalToad3639

Report
(require spd/tags) (@assignment exams/2023w2-mt1/mt1-p5) (@problem 1) ;do not edit or delete this line (@problem 2) ;do not edit or delete this line (@problem 3) ;do not edit or delete this line (@problem 4) ;do not edit or delete this line (@problem 5) ;do not edit or delete this line #| Given the following data definitions: |# (@htdd Grocery) (define-struct grocery (name price org? cat)) ;; Grocery is (make-grocery String Number Boolean String) ;; interp. A grocery item with name, unit price, whether or not ;; it is organic, and category (define G1 (make-grocery "apple" 1.59 false "fruit")) (define G2 (make-grocery "yogurt" 7.99 true "dairy")) (define G3 (make-grocery "string cheese" 10.99 false "dairy")) (define G4 (make-grocery "ground beef" 8.49 true "meat")) (@dd-template-rules compound) (define (fn-for-grocery g) (... (grocery-name g) (grocery-price g) (grocery-org? g) (grocery-cat g))) (@htdd ListOfGrocery) ;; ListOfGrocery is one of: ;; - empty ;; - (cons Grocery ListOfGrocery) ;; interp. a list of grocery items
(define LOG1 empty) (define LOG2 (cons G1 (cons G2 empty))) (@dd-template-rules one-of atomic-distinct compound ref self-ref) (define (fn-for-log log) (cond [(empty? log) (...)] [else (... (fn-for-grocery (first log)) (fn-for-log (rest log)))])) (@htdf filter-grocery-total) (@signature ListOfGrocery String -> Number) ;; produce sum of cost of groceries that are organic and in given category (check-expect (filter-grocery-total empty "meat") 0) (check-expect (filter-grocery-total (cons G1 (cons G2 (cons G3 (cons G4 empty)))) "dairy") 7.99) (check-expect (filter-grocery-total (cons (make-grocery "cheese" 3.00 true "dairy") (cons G1 (cons G2 (cons G3 (cons G4 empty))))) "dairy") 10.99) ;(define (filter-grocery-total log s) 0) ; stub (@template-origin ListOfGrocery) (@template (define (filter-grocery-total log s) (cond [(empty? log) (... s)] [else (... s (fn-for-grocery (first log)) (filter-grocery-total (rest log) s))])))
(define (filter-grocery-total log s) (cond [(empty? log) 0] [else (+ (if (organic-in-category? (first log) s) (grocery-price (first log)) 0) (filter-grocery-total (rest log) s))])) (@htdf organic-in-category?) (@signature Grocery String -> Boolean) ;; produce true if grocery item is organic and is in given category (check-expect (organic-in-category? (make-grocery "a" 2 true "b") "b") true) (check-expect (organic-in-category? (make-grocery "a" 2 true "b") "a") false) (check-expect (organic-in-category? (make-grocery "a" 2 false "b") "b") false) (check-expect (organic-in-category? (make-grocery "a" 2 false "b") "a") false) ;(define (organic-in-category? g s) false) ; stub (@template-origin Grocery) (@template (define (organic-in-category? g cat) (... cat (grocery-name g) (grocery-price g) (grocery-org? g) (grocery-cat g)))) (define (organic-in-category? g cat) (and (grocery-org? g) (string=? (grocery-cat g) cat)))
Your preview ends here
Eager to read complete document? Join bartleby learn and gain access to the full version
  • Access to all documents
  • Unlimited textbook solutions
  • 24/7 expert homework help