Ну, вы, наверное, хотите что-то подобное, верно?
((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
? Можете ли вы выделить шаблон в результирующем списке шагов и воспроизвести его?