获取一个值并将其传递给结构列表并返回具有相应值的列表
Taking a value and passing it through a list of structures and returning a list that has the corresponding value
我正在尝试编写一个函数,它将一年和一个结构列表(定义为事件)作为输入并吐出相应的结构。
(define-struct incident (name day mon yr)#:transparent)
(define cake (make-incident "cake" 15 "Apr" 2015))
(define Graduation (make-incident "graduation" 2 "Mar" 2017))
(define (incidentYr yr aList)
(foldl
(lambda (x y) (if (equal? (incident-yr x) yr) (append x y) y))
'() aList))
(check-expect (incidentYr 2015 (list (incident "cake" 29 "Apr" 2015) (incident "graduation" 7 "Mar" 2017))) (list (incident "cake" 29 "Apr" 2015)))
但我得到的错误是:
check-expect encountered the following error instead of the expected value, (list (incident "cake" 29 "Apr" 2015)).
:: append: expects a list, given (incident "cake" 29 "Apr" 2015)
好像不行。
在 foldl 的 lambda 中,将 (append x y)
更改为 (append (list x) y)
。您也可以将其更改为 (cons x y)
一个更自然的解决方案是使用过滤器而不是折叠:
(filter (λ (x) (= (incident-yr x) yr)) aList)
我正在尝试编写一个函数,它将一年和一个结构列表(定义为事件)作为输入并吐出相应的结构。
(define-struct incident (name day mon yr)#:transparent)
(define cake (make-incident "cake" 15 "Apr" 2015))
(define Graduation (make-incident "graduation" 2 "Mar" 2017))
(define (incidentYr yr aList)
(foldl
(lambda (x y) (if (equal? (incident-yr x) yr) (append x y) y))
'() aList))
(check-expect (incidentYr 2015 (list (incident "cake" 29 "Apr" 2015) (incident "graduation" 7 "Mar" 2017))) (list (incident "cake" 29 "Apr" 2015)))
但我得到的错误是:
check-expect encountered the following error instead of the expected value, (list (incident "cake" 29 "Apr" 2015)).
:: append: expects a list, given (incident "cake" 29 "Apr" 2015)
好像不行。
在 foldl 的 lambda 中,将 (append x y)
更改为 (append (list x) y)
。您也可以将其更改为 (cons x y)
一个更自然的解决方案是使用过滤器而不是折叠:
(filter (λ (x) (= (incident-yr x) yr)) aList)