我正在尝试编写一个函数以根据条件生成定义的结构类型的列表,但只能获取它以生成完整的结构,而不仅仅是名称。
这是我尝试生成整个结构的步骤。
(define-struct birthday (name day month)#:transparent)
(define (bdayRange startday endday lst)
(filter (lambda (x) (<= startday (birthday-day x) endday)) lst))
不确定给定生日结构的列表以及一个月中的某天的范围(从1到30),如何获取该函数来生成生日名称参数。我觉得解决方案很明显,但我可以t弄清楚。
这是我的尝试。
(define (bdayRange startday endday lst)
(filter (lambda (x) (if (<= startday (birthday-day x) endday) (birthday-name x) '()) lst))
更好的方法是解析生日名称的结构列表或封装条件范围吗?
为什么不仅仅将map
覆盖在birthday
结构的birthday-name
结构的筛选列表中?
(define (bdayRange startday endday lst)
(map birthday-name
(filter (lambda (x) (<= startday (birthday-day x) endday)) lst)))
这将返回给定范围内的name
个列表:
scratch.rkt> (define bday-list (list (birthday 'sam 25 'april)
(birthday 'erin 15 'april)
(birthday 'james 3 'april)
(birthday 'randi 7 'april)))
scratch.rkt> (bdayRange 6 17 bday-list)
'(erin randi)