Взятие значения и прохождение его через список структур и возвращение списка, который имеет соответствующее значение - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь написать функцию, которая принимает год и список структур (определяемых как инцидент) в качестве входных данных и выплевывает соответствующую структуру.

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

Не похоже на работу.

1 Ответ

1 голос
/ 28 апреля 2020

В лямбде в сгибе измените (append x y) на (append (list x) y). Вы также можете изменить его на (cons x y)

Более естественным решением было бы использование фильтра вместо сгиба:

(filter (λ (x) (= (incident-yr x) yr)) aList)
...