;; CIS 352, EXAM 1: Distributions of Scores ;; Range Scores ;; 21- 30: 30 ;; 31- 40: 37 ;; 41- 50: 44 49 ;; 51- 60: 51 53 54 54 57 ;; 61- 70: 67 69 ;; 71- 80: 74 74 75 75 76 80 ;; 81- 90: 81 83 85 85 87 ;; 91-100: 92 ;; ;; Average: 66.61 Median: 74.0 (define displayln (lambda items (map (lambda (x) (display x) (display " ")) items) (newline))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Question 1. (define a 0) (define b 3) (define c 6) (define one '((1 2) (3 4) (5 6))) (define two '(a b c)) (define three '(100 200 300)) (define four (cons 'two three)) (define result (let ((a 1) (b (* a 10)) (c (+ b a))) (let ((c 0) (b (+ c 1))) (list a b c)))) (define sample (lambda x (cons a (length x)))) (displayln "**Question 1**") (displayln "Question 1a: (cdar one) ~~> " (cdar one)) (displayln "Question 1b: four ~~> " four) (displayln "Question 1c: (equal? (cons a b) '(a . b) ) ~~> " (equal? (cons a b) '(a . b) )) (displayln "Question 1d: (append three one) ~~> " (append three one)) (displayln "Question 1e: (map cdr one) ~~> " (map cdr one)) (displayln "Question 1f: (map cons two three) ~~> " (map cons two three)) (displayln "Question 1g: result ~~> " result) (displayln "Question 1h: (sample '((z y) w y)) ~~> " (sample '((z y) w y))) (displayln "Question 1i: (apply sample one) ~~> " (apply sample one)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Question 2. ;; a. list, because it takes an arbitrary number of arguments ;; b. +---+---+ +---+---+ +---+---+ +---+---+ +---+---+ ;; | 1 | ----->| 2 | ----->| 3 | ----->| 4 | ----->| 5 | / | ;; +---+---+ +---+---+ +---+---+ +---+---+ +---+---+ ;; ;; c. +---+---+ +---+---+ +---+---+ ;; | 1 | ----->| | | ----------------->| | | / | ;; +---+---+ +-|-+---+ +-|-+---+ ;; | | ;; V V ;; +---+---+ +---+---+ +---+---+ +---+---+ ;; | 2 | ----->| 3 | / | | 4 | ----->| 5 | / | ;; +---+---+ +---+---+ +---+---+ +---+---+ ;; ;; d. +---+---+ +---+---+ +---+---+ ;; | | | ----------------->| 3 | ----->| | | / | ;; +-|-+---+ +-|-+---+ +-|-+---+ ;; | | ;; V V ;; +---+---+ +---+---+ +---+---+ +---+---+ ;; | 1 | ----->| / | ----->| 2 | 4/| | 4 | 5 | ;; +---+---+ +---+---+ +---+---+ +---+---+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (displayln "\n\n**Question 3**") (define diag (lambda (proc) (lambda (x) (proc x x)))) (define my-proc (diag cons)) (displayln "(my-proc 'a) ~~> " (my-proc 'a)) (displayln "(my-proc 10) ~~> " (my-proc 10)) (displayln "((diag +) 1) ~~> " ((diag +) 1)) (displayln "((diag *) 7) ~~> " ((diag *) 7)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (displayln "\n\n**Question 4**") (define longest (lambda xss (if (null? xss) 0 (max (length (car xss)) (apply longest (cdr xss)))))) (define longest-also (lambda xss (if (null? xss) 0 (apply max (map length xss))))) (displayln "(longest '(1 2 3) '(a b c d e) '() '(#t #f)) ~~> " (longest '(1 2 3) '(a b c d e) '() '(#t #f))) (displayln "(longest) ~~> " (longest)) (displayln "(longest-also '(1 2 3) '(a b c d e) '() '(#t #f)) ~~> " (longest-also '(1 2 3) '(a b c d e) '() '(#t #f))) (displayln "(longest-also) ~~> " (longest-also)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (displayln "\n\n**Question 5**") (define zip (lambda (lst1 lst2) (if (or (null? lst1) (null? lst2)) () (cons (cons (car lst1) (car lst2)) (zip (cdr lst1) (cdr lst2)))))) (displayln "(zip '(a b c d e) '(1 2 3)) ~~~> " (zip '(a b c d e) '(1 2 3))) (displayln "(zip '(a b c d e) '(1 2 3 4 5 6 7)) ~~~> " (zip '(a b c d e) '(1 2 3 4 5 6 7))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (displayln "\n\n**Question 6**") (define remove-all (lambda (sym slst) (cond ((null? slst) ()) ((symbol? (car slst)) (if (eqv? sym (car slst)) (remove-all sym (cdr slst)) (cons (car slst) (remove-all sym (cdr slst)))) ) (else (cons (remove-all sym (car slst)) (remove-all sym (cdr slst))))))) (define remove-all-too (lambda (sym slst) (apply append (map (lambda (se) (rm-all-se sym se)) slst)))) (define rm-all-se (lambda (sym se) (if (symbol? se) (if (eqv? se sym) () (list se)) (list (remove-all-too sym se))))) (displayln "(remove-all 'a '(a b a c d)) ~~~> " (remove-all 'a '(a b a c d))) (displayln "(remove-all 'e '(a b a c d)) ~~~> " (remove-all 'e '(a b a c d))) (displayln "(remove-all 'a '(a (b a c) () d (e))) ~~~> " (remove-all 'a '(a (b a c) () d (e)))) (displayln "(remove-all-too 'a '(a b a c d)) ~~~> " (remove-all-too 'a '(a b a c d))) (displayln "(remove-all-too 'e '(a b a c d)) ~~~> " (remove-all-too 'e '(a b a c d))) (displayln "(remove-all-too 'a '(a (b a c) () d (e))) ~~~> " (remove-all-too 'a '(a (b a c) () d (e))))