;; YOUR CWLs WILL BE SUFFICIENT TO IDENTIFY YOU AND, IF YOU HAVE ONE, YOUR
;; PARTNER.
(require 2htdp/universe)
(require 2htdp/image)
(require spd/tags)
(@assignment pset-04);Do not edit or remove this tag
(@cwl ??? ???) ;Replace ??? with your cwl,
;; ;second ??? is replaced with partner cwl if you have one
(@problem 1)
;; Design a data definition for a song. Each song has a name, an artist,
;; and a duration (the length of the song in seconds).
;;
;; Your design must follow all applicable recipes, and must include all
;; appropriate @tags. Solutions which "just work" but do not follow the design
;; recipes will receive few if any marks.
(@htdd Song)
(define-struct song (name artist duration))
;; Song is (make-song String String Natural)
;; interp. a song with a title (name), artist,
;; and length of time in seconds
(define S1 (make-song "Shape of You" "Ed Sheeran" 233))
(define S2 (make-song "Rockstar" "Post Malone" 218))
(define S3 (make-song "All of Me" "John Legend" 269))
(@dd-template-rules compound)
, (define (fn-for-song s)
(... (song-name s)
(song-artist s)
(song-duration s)))
(@problem 2)
;; Use your data definition from Problem 1 to complete this problem.
;;
;; Design a data definition for an arbitrary number of songs.
;;
;; Your design must follow all applicable recipes, and must include all
;; appropriate @tags. Solutions which "just work" but do not follow the design
;; recipes will receive few if any marks.
(@htdd ListOfSong)
;; ListOfSong is one-of:
;; - empty
;; - (cons Song ListOfSong)
;; interp. a list of songs
(define LOS0 empty)
(define LOS1 (cons S1 (cons S2 (cons S3 empty))))
(@dd-template-rules one-of
atomic-distinct
compound
ref
self-ref)