Problem 4. You spend your summer consulting for a media conglomerate that owns several radio stations. Much of your code manipulates songs and song play-lists that are represented via the following data definition:
(define-struct song (artist title year)) ;;; A Song is (make-song String String Number) ;;; A List of Songs (LOS) is one of: ;;; - empty ;;; - (cons Song LOS)
Your manager needs the function, @noligsoldies, which takes as its input a list of songs, and returns the list containing all the songs recorded before 1975. Design this function.
;;; Grader: Theo ;;; oldies: LOS -> LOS [1pt] ;;; Filter input, keeping songs recorded before 1975. [1pt] (define (oldies los) ;; [2pt: for two arms of COND.] (cond [(empty? los) empty] ; [1pt, for base case] ;; [1pt: nested conditional] ;; [1pt: natural recursion] ;; [1pt: correctness] [else (cond [(< (song-year (first los)) 1975) (cons (first los) (oldies (rest los)))] [else (oldies (rest los))])])) ;;; Examples/tests: [2pt for a non-trivial example or two examples] (equal? empty (oldies empty)) (equal? (oldies (cons (make-song "Let it bleed" "Rolling Stones" 1969) (cons (make-song "Achy breaky heart" "Billy Ray Cyrus" 1992) empty))) (cons (make-song "Let it bleed" "Rolling Stones" 1969) empty))