2008-10-30 4 views
1

Кто-нибудь знаком с этим?Процедура схемы для вычисления n-го повторного применения функции?

Написать процедуру, которая принимает в качестве входных сигналов процедуры, которая вычисляет F и натурального числа п и возвращает процедуру, которая вычисляет п-й повторного применения ф. Процедура должна быть в состоянии использовать в качестве следующим образом:

((repeated square 2) 5) 
625 

Я знаю, что следующий код, который я создал для композиции функций поможет сделать решение проще, но я не уверен, где поступить отсюда:

(define (compose f g) (lambda (x) (f (g x)))) 

ответ

1

Ну, вы, вероятно, хотите что-то вроде этого, не так ли?

((repeated square 3) 5) 
-> (square ((repeated square 2) 5)) 
-> (square (square ((repeated square 1) 5))) 
-> (square (square (square ((repeated square 0) 5)))) 
-> (square (square (square (identity 5)))) 

(я не знаю, является ли identity предопределен на схеме. Если нет, то это легко писать.)

Теперь, это напрямую не воспроизводимы, потому что вы не можете магически заключить код за пределами звонок в repeated с произвольным материалом. Однако, как выглядят эти шаги восстановления при перезаписи с использованием compose? Можете ли вы составить шаблон в результирующем списке шагов и воспроизвести его?

0
(define (repeated f n) 
    (if (zero? n) 
    identity 
    (lambda (x) ((repeated f (- n 1)) (f x))))) 

или, если вы настаиваете на использовании "сочинить":

(define (repeated f n) 
    (if (zero? n) 
    identity 
    (compose (repeated f (- n 1)) f))) 

 Смежные вопросы

  • Нет связанных вопросов^_^