Я пытаюсь создать функцию, которая заворачивается n
раз, используя функцию, называемую repeat
Как повторить вызов функции п раз
(define (repeat f n)
(if (= n 1)
f
(repeat (lambda (x) (f x)) (- n 1))))
((repeat inc 5) 2)
Я ожидаю, что результат будет равен
(inc (inc (inc (inc (inc 2))))) ; 7
Но мой результат: 3
Что я делаю неправильно?
Чтобы было ясно, я хочу repeat
вернуть функцию, которая принимает один аргумент. f
не следует применять до тех пор, пока не будет возвращено возвращаемое значение repeat
с аргументом.
например,
(define inc5 (repeat inc 5))
(inc5 2) ; => 7
P.S.,
Это связаны, но не идентичны осуществлять 1.43 в SICP. Я решил проблему, поскольку она представлена там, но мне любопытно, можно ли ее решить так же.
Какой синтаксис не распространен? – naomik
'(define (repeat f x) ...)' должно быть '(defun repeat (f x) ...)' – sds