Month: November, 2007

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

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

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

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

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

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

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

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

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

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

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

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