Month: November, 2007

Решение упражнения 1.44 из SICP

4 November, 2007 (19:07) | Решения упражнений | 5 comments

Это просто замечательнейшее упражнение! Сейчас объясню, почему оно мне так понравилось, но начнем с простого, то есть с определения процедуры smooth. Здесь все достаточно легко: (define (smooth f dx) (define (average x y z) (/ (+ x y z) 3)) (lambda (x) (average (f (- x dx)) (f x) (f (+ x dx))))) А вот […]

Решение упражнения 1.43 из SICP

2 November, 2007 (20:50) | Решения упражнений | 10 comments

Продолжим наше жонглирование пудовыми функциями с той же легкостью, с которой обычно управляются с подобными перышкам примитивными переменными. Воспользовавшись подсказкой об использовании ранее написанной процедуры compose и заметив, что повторенная n раз функция f – это композиция повторенной n-1 раз функции f с самой функцией f, легко получим такой код процедуры: (define (repeated f n) […]

Решение упражнения 1.42 из SICP

1 November, 2007 (21:49) | Решения упражнений | 1 comment

После шапочного знакомства с композицией в прошлом упражнении в этом мы перейдем к более близкому контакту. Композиция функций – одно из важных базовых математических понятий. Крайне неформально композицию функций можно определить как функцию, которая вычисляется как применение одной функции к результату другой. Реализация процедуры композиции из упражнения очень лаконична: (define (compose f g)   (lambda (x) […]

Решение упражнения 1.41 из SICP

1 November, 2007 (21:16) | Решения упражнений | 1 comment

Интересное упражнение. Да и вообще работа с функциями высших порядков – сплошное интеллектуальное удовольствие. Процедура double записывается очень просто: (define (double f)   (lambda (x) (f (f x)))) Ее запуск в простых случаях приводит ко вполне ожидаемым результатам: > ((double square) 2) 16 > ((double inc) 5) 7 Что же выведет (((double (double double)) inc) 5)? […]