;; find-cat : LOS -> Boolean ;; Is 'cat in los? #;(define (find-cat los) (cond [(empty? los) false] [else (or (symbol=? (first los) 'cat) (find-cat (rest los)))])) ;; find-dog : LOS -> Boolean ;; Is 'dog in los? #;(define (find-dog los) (cond [(empty? los) false] [else (or (symbol=? (first los) 'dog) (find-dog (rest los)))])) ;; find : Symbol LOS -> Boolean ;; Is s in los? (define (find s los) (cond [(empty? los) false] [else (or (symbol=? (first los) s) (find s (rest los)))])) ;; find-cat : LOS -> Boolean ;; Is 'cat in los? (define (find-cat los) (find 'cat los)) (check-expect (find-cat (list 'dog 'elephant 'cat)) true) (check-expect (find-cat (list 'dog 'elephant)) false) ;; find-dog : LOS -> Boolean ;; Is 'dog in los? (define (find-dog los) (find 'dog los)) (check-expect (find-dog (list 'dog 'elephant 'cat)) true) (check-expect (find-dog (list 'elephant)) false) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Parametric data definitions ;; ;; A [Listof X is one of: ;; - empty ;; - (cons X [Listof X]) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sum : LON -> Number ;; compute sum of the numbers in the given list #;(define (sum lon) (cond [(empty? lon) 0] [else (+ (first lon) (sum (rest lon)))])) ;; product : LON -> Number ;; compute product of the numbers in the given list #;(define (product lon) (cond [(empty? lon) 1] [else (* (first lon) (product (rest lon)))])) ;; process : [X Y -> Y] Y [Listof X] -> Y (define (process op base lox) (cond [(empty? lox) base] [else (op (first lox) (process op base (rest lox)))])) ;; sum : LON -> Number ;; compute sum of the numbers in the given list (define (sum lon) (process + 0 lon)) ;; instantiating X = Number and Y = Number in signature of process ;; product : LON -> Number ;; compute product of the numbers in the given list (define (product lon) (process * 1 lon)) ;; instantiating X = Number and Y = Number in signature of process (check-expect (sum (list 1 2 3)) 6) (check-expect (product (list 2 2 3)) 12) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; seg+scene : Posn Image -> Image ;; added a red segment at position p on top on given scene scn (define (seg+scene p scn) (place-image (circle 5 'solid 'red) (posn-x p) (posn-y p) scn)) ;; segs+scene : [Listof Posn] Image -> Image #;(define (segs+scene lop scn) (cond [(empty? lop) scn] [else (seg+scene (first lop) (segs+scene (rest lop) scn))])) ;; segs+scene : [Listof Posn] Image -> Image (define (segs+scene lop scn) (process seg+scene scn lop)) ;; instantiating X = Posn and Y = Image in signature of process ;; Note: process is built in; it is called foldr (segs+scene (list (make-posn 10 10) (make-posn 10 20) (make-posn 20 20)) (empty-scene 100 100))