;; update-year: ftnode string number -> ftnode ;; consumes a family tree, a name and a new year and produces a tree the same as the original ;;except that the named person has the given year (define (update-year aft name year) (cond [(symbol? aft) 'unknown] [(person? aft) (cond [(string=? name (person-name aft)) (make-person name year (person-eye aft) (person-mother aft) (person-father aft))] [else (make-person (person-name aft) (person-year aft) (person-eye aft) (update-year (person-mother aft) name year) (update-year (person-father aft) name year))])])) ;; test (check-expect (update-year MaryTree "Ann" 1962) (make-person "Mary" 1980 'blue (make-person "Ann" 1962 'green 'unknown (make-person "Fred" 1936 'blue 'unknown 'unknown)) (make-person "Joe" 1960 'blue 'unknown 'unknown))) (check-expect (update-year 'unknown "Ann" 1962) 'unknown)