将条件应用于结构并产生结构类型的列表

问题描述 投票:0回答:1

我正在尝试编写一个函数以根据条件生成定义的结构类型的列表,但只能获取它以生成完整的结构,而不仅仅是名称。

这是我尝试生成整个结构的步骤。

(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))

更好的方法是解析生日名称的结构列表或封装条件范围吗?

struct lambda racket
1个回答
0
投票

为什么不仅仅将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)
© www.soinside.com 2019 - 2024. All rights reserved.