В этом вопросе возникает вопрос о создании функции forEach, которая удовлетворяет следующему взаимодействию. Он говорит, что функция должна создавать закрытие вокруг списка и поведения.Схема для каждой функции
(define iterator (forEach (list 1 2 3 4 5)))
(iterator (lambda (x)(* x x))) → (1 4 9 16 25)
(iterator (lambda (x)(* x 10))) → (10 20 30 40 50)
Я не могу понять, как это понять. Вот как я начал, но я мог бы быть далеко:
(define (map procedure items)
(if (null? items)
'()
(cons (procedure (car items))
(map procedure (cdr items)))))
(define (forEach l) (lambda (x)
(cond ((not (null? l))
(x (car l))
(forEach (map x (cdr l)))))))
(define iterator (forEach (list 1 2 3 4 5)))
(iterator (lambda (x)(* x x)))
(iterator (lambda (x)(* x 10)))