Month: August, 2007

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

18 August, 2007 (19:34) | Решения упражнений | 6 comments

Что ж, рассчитаем функцию Аккермана для указанных значений. Сразу хочу уточнить, что определение функции Аккермана, данное в SICP, отличается от определения из некоторых других источников, например из Википедии (не только русскоязычной) и MathWorld. Впрочем, для решения поставленной перед нами задачи это не является существенным. Сначала из условия сразу увидим, что (f n) = (A 0 […]

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

17 August, 2007 (20:02) | Решения упражнений | 3 comments

Понимание рекурсивных процессов и хвостовой рекурсии (tail recursion) чрезвычайно важно для создания эффективных программ в функциональном стиле. В этом упражнении нам нужно будет сравнить два процесса для получения одного и того же результата с помощью одинаковых элементарных средств. Первый процесс породит такую последовательность: (+ 4 5) (inc (+ 3 5)) (inc (inc (+ 2 5))) (inc […]

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

15 August, 2007 (23:40) | Решения упражнений | 7 comments

Это упражнение не слишком сложное, поэтому на его решении можно заодно продемонстрировать и внутренние определения процедур. Вот полное решение: (define (qbrt-iter guess x)   (if (good-enough? guess x)       guess       (qbrt-iter (improve guess x)                  x))) (define (good-enough? guess x)   (< (abs (- (qube guess) x)) 0.001)) (define (qube x) (* x x […]

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

15 August, 2007 (23:25) | Решения упражнений | 13 comments

Перед тем, как что-то разрабатывать, как нас просят в упражнении, сначала убедимся в том, что проблема, которую мы хотим преодолеть, путем усовершенствования кода, действительно существует. (define (sqrt-iter guess x)   (if (good-enough? guess x)       guess       (sqrt-iter (improve guess x)                  x))) (define (good-enough? guess x)   (< (abs (- (square guess) x)) 0.001)) (define […]

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

15 August, 2007 (20:49) | Решения упражнений | 17 comments

Отличное упражнение на понимание того, как происходит выполнение процедур. Вспомним прошлое упражнение и тот факт, что Scheme при интерпретации использует аппликативный порядок вычислений. Итак, как же будет вычисляться фунция Лизы? (define (sqrt-iter guess x)   (new-if (good-enough? guess x)           guess           (sqrt-iter (improve guess x)                      x))) При вычислении new-if сначала должны быть вычислены […]

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

14 August, 2007 (22:38) | Решения упражнений | 1 comment

Итак, аппликативный порядок вычислений и нормальный. При аппликативном порядке вычислений сначала полностью вычисляются операнды, а затем происходит вычисление процедуры с вычисленными значениями операндов. То есть при вычислении (test 0 (p)) прежде всего (до собственно выполнения операций из тела процедуры) нужно будет вычислить (p). Но по хитрому определению для вычисления значения (p) необходимо вычислить… опять же (p). Таким образом […]

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

14 August, 2007 (22:23) | Решения упражнений | 5 comments

Итак, нам предлагают код процедуры: (define (a-plus-abs-b a b)   ((if (> b 0) + -) a b)) Работает она очень просто и естественно (особенно если не вспоминать об ограничениях многих императивных языков). Так как операции + и – являются такими же полноправными членами языка, как и переменные, мы можем включать их в любые языковые […]

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

14 August, 2007 (22:13) | Решения упражнений | 29 comments

В третьем упражнении мы напишем самостоятельно первую процедуру. Используем введенные в главе процедуры (define (square a)  (* a a)) (define (sum-of-squares a b)   (+ (square a) (square b))) и запишем: (define (sum-of-biggest-squares a b c)   (cond ((and (>= a c) (>= b c)) (sum-of-squares a b))         ((and (>= a b) (>= c […]

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

14 August, 2007 (00:37) | Решения упражнений | No comments

Второе упражнение первой главы тоже не представляет собой особенной сложности. Все естественно: (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))

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

13 August, 2007 (20:22) | Решения упражнений | 1 comment

Что ж, приступим к решению упражнений. Первое упражнение несложное. > 10 10 > (+ 5 3 4) 12 > (- 9 1) 8 > (/ 6 2) 3 > (+ (* 2 4) (- 4 6)) 6 > (define a 3) > (define b (+ a 1)) > (+ a b (* a b)) 19 […]