;; 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-abbr-reader.ss" "lang")((modname sample-exam2-sols) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f () #f))) ; Midterm 2 Review ; (Fall 2017 sample exam) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Fall 2017 Midterm II - Problem 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-struct cat (letter hat)) ; A Cat is either: ; - "Voom" ; - (make-cat String Cat) ; a) (define catVoom "Voom") (define catB (make-cat "B" catVoom)) (define catC (make-cat "C" catB)) ; b) ; Cat -> ... ; Template for a function that consumes a Cat (define (fun-for-cat c) (cond [(string? c) ...] [(cat? c) (... (cat-letter c)... ... (fun-for-cat (cat-hat c)) ...)])) ; c) ; Cat String -> boolean ; Determines whether c contains let (define (contains-letter? c let) (cond [(string? c) #false] [(cat? c) (or (string=? (cat-letter c) let) (contains-letter? (cat-hat c) let))])) (check-expect (contains-letter? catVoom "G") #false) (check-expect (contains-letter? catB "A") #false) (check-expect (contains-letter? catC "B") #true) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Fall 2017 Midterm II - Problem 3: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; lon lon -> boolean ; determines whether any pair of numbers in corresponding positions ; in lon1 and lon2 are equal (define (any=? lon1 lon2) (cond [(empty? lon1) #false] [(cons? lon1) (or (equal? (first lon1) (first lon2)) (any=? (rest lon1) (rest lon2)))])) (check-expect (any=? '() '()) #false) (check-expect (any=? (list 1 2 3) (list 1 2 3)) #true) (check-expect (any=? (list 4 5 6) (list 2 4 6)) #true) (check-expect (any=? (list 1 2 3) (list 4 5 6)) #false) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Fall 2017 Midterm II - Problem 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-struct node (value left right)) ; A binary-tree (BT) is either ; - ’() ; - (make-node Number BT BT) ; a) (define n1 (make-node 1 '() '())) (define n3 (make-node 3 '() '())) (define n4 (make-node 4 '() '())) (define n6 (make-node 6 '() '())) (define n2 (make-node 2 n1 n3)) (define n5 (make-node 5 n4 n6)) (define n7 (make-node 7 n2 n5)) ; b) ; BT -> ... ; template for a function that consumes a BT (define (fun-for-bt bt) (cond [(empty? bt) ...] [(node? bt) (...(node-value bt)... ...(fun-for-bt (node-left bt))... ...(fun-for-bt (node-right bt))...)])) ; BT -> number ; produces the sum of the odd numbers contained in bt (define (sum-odds bt) (cond [(empty? bt) 0] [(node? bt) (cond [(odd? (node-value bt)) (+ (node-value bt) (sum-odds (node-left bt)) (sum-odds (node-right bt)))] [else (+ (sum-odds (node-left bt)) (sum-odds (node-right bt)))])])) (check-expect (sum-odds '()) 0) (check-expect (sum-odds n4) 0) (check-expect (sum-odds n7) 16) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Fall 2017 Midterm II - Problem 5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; A directory is ; A file-or-directory is either ; - (make-dir string LOFD) ; - file (define-struct dir (name content)) ; - directory ; A file is ; A LOFD is either ; - (make-file string number) ; - '() (define-struct file (name size)) ; - (cons file-or-directory LOFD) ; directory -> boolean ; determines whether dir contains a large file (define (large-file-for-dir? dir) (large-file-for-lofd? (dir-content dir))) ; file -> boolean ; determines whether given file f is large (define (large-file-for-file? f) (> (file-size f) 100)) ; file-or-directory -> boolean ; determines whether fod is/contains a large file (define (large-file-for-fod? fod) (cond [(file? fod) (large-file-for-file? fod)] [(dir? fod) (large-file-for-dir? fod)]))) ; LOFD -> boolean ; determines whether lofd contains a large file (define (large-file-for-lofd? lofd) (cond [(empty? lofd) #false] [(cons? lofd) (or (large-file-for-fod? (first lofd)) (large-file-for-lofd? (rest lofd)))])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Spring 2019 Final Exam - Problem 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-struct book (genre words)) ; A list-of-books (LOB) is either ; A Book is a (make-book string number) ; - '() ; - (cons Book LOB) ; a) ; LOB string -> number ; counts number of books of given genre in lob (define (count-genre lob genre) (cond [(empty? lob) 0] [(cons? lob) (cond [(string=? (book-genre (first lob)) genre) (+ 1 (count-genre (rest lob) genre))] [else (count-genre (rest lob genre))])])) ; b) (define (count-nonfiction lob) (count-genre lob "non-fiction")) (define (count-fiction lob) (count-genre lob "fiction")) ; c) ; LOB (book -> bool) -> number ; counts number of books of given genre in lob (define (count-pred lob PRED) (cond [(empty? lob) 0] [(cons? lob) (cond [(PRED (first lob)) (+ 1 (count-pred (rest lob) PRED))] [else (count-pred (rest lob PRED))])])) ; d) ; LOB -> number ; counts all the novellas in lob (define (count-novellas lob) (local [(define (novella? b) (and (string=? "fiction" (book-genre b)) (<= 30000 (book-words b) 60000)))] (count-pred lob novella?)))