У вас есть пара ошибок:
- В процедуре
square
есть дополнительные *
, которых не должно быть - Если мы создаем список как выводим, тогда базовый случай должен возвращать пустой список
'()
, а не 0
. - Часть, в которой вы работаете с текущим элементом списка, неверна, вы должны просто вызвать процедуру
factor
в car
списка, и нет необходимости снова умножать, square
позаботится об этом.
Это должно исправить их:
(define (square n) (* n n))
(define (fun items factor)
(if (null? items)
'()
(cons (factor (car items))
(fun (cdr items) factor))))
В в реальной жизни вам не нужно реализовывать эту процедуру самостоятельно, map
уже встроен, и использовать его так же просто, как это:
(map square '(1 2 3 4))
=> '(1 4 9 16)