Хвостовая рекурсия и CPS
Я застрял на этой проблеме некоторое время. Я передаю предикат и список другой функции в схеме. Если предикат дает вам истину, вы добавляете его в свой список ответов, иначе пропускаете.
Например, (myfilt positive? '(1 -2 3))
должно быть (1 3)
, Но я получаю (1 . 0)
,
(define myfilt
(letrec ([testfilt (lambda (x poly function)
(if (empty? poly)
(function '())
(testfilt x (rest poly)
(lambda (v)
(function (if (x (car poly))
(cons (car poly) v)
0))))))]
[identity (lambda (x) x)])
(lambda (x poly)
(testfilt x poly identity))))
1 ответ
Ваш самый внутренний if
следует использовать v
для ветви else - не 0. Таким образом:
(if (x (car poly))
(cons (car poly) v)
v)