Month: October, 2007

Поездка в Харьков

28 October, 2007 (22:12) | Личное | No comments

Давно не делал записей не по основной теме ресурса. Надо слегка отвлечься. На выходных был впервые в Харькове (гостем на свадьбе). Город в целом оставил приятное впечатление, не последнюю роль в чем, думаю, сыграла отличная для конца октября солнечная и теплая погода. К сожалению, свободного времени было в обрез, потому много про харьковские достопримечательности и […]

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

25 October, 2007 (22:38) | Решения упражнений | 2 comments

Нам нужно определить процедуру, которая принимает три числовых параметра (это коэффициенты кубического уравнения) и возвращает процедуру одного аргумента – переменной, относительно которой записано кубическое уравнение. Это несложно сделать с помощью конструкции lambda: (define (cubic a b c)   (lambda (x) (+ (* x x x) (* a x x) (* b x) c))) Попробуем вычислить […]

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

25 October, 2007 (21:15) | Решения упражнений | 2 comments

Еще одно простое упражнение, сроди упражнению 1.38. Просто приведу определение процедуры для вычисления тангенса по формуле Ламберта: (define (tan-cf x k)   (cont-frac (lambda (i) (if (= i 1) x (- (* x x))))              (lambda (i) (- (* 2 i) 1))              k))

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

25 October, 2007 (21:09) | Решения упражнений | 2 comments

Это упражнение совсем простое и основывается на результатах предыдущего. Определим процедуру для вычисления приближения к числу e (здесь параметр – это число элементов в конечной цепной дроби): (define (e k)   (+ 2 (cont-frac (lambda (i) 1.0)                   (lambda (i) (if (= (remainder i 3) 2)                                      (* 2 (/ (+ i 1) 3))                                      […]

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

24 October, 2007 (21:05) | Решения упражнений | 6 comments

Сначала реализуем процедуру cont-frac, порождающую рекурсивный процесс: > (define (cont-frac n d k)     (define (iter i)       (/ (n i) (+ (d i)                   (if (< i k)                       (iter (+ i 1))                       0))))     (iter 1)) > (/ 1 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 100)) 1.618033988749895 Найдем число итераций, необходимых для […]

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

24 October, 2007 (20:26) | Решения упражнений | 2 comments

Добавим отладочную печать в процедуру fixed-point следующим образом: (define tolerance 0.00001) (define (fixed-point f first-guess)   (define (close-enough? v1 v2)     (< (abs (- v1 v2)) tolerance))   (define (try guess iteration)     (display iteration)     (display “:t”)     (display guess)     (newline)     (let ((next (f guess)))          (if (close-enough? guess next)              next […]

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

24 October, 2007 (20:02) | Решения упражнений | 1 comment

По определению из раздела 1.2.2 золотое сечение (φ) – это число, удовлетворяющее соотношению φ² = φ + 1. Разделив на φ обе части равенства, получим φ = 1 + 1/φ, из чего следует, что φ является неподвижной точкой отображения (функции, трансформации) x → 1 + 1/x. Вычислить значение φ с помощью процедуры fixed-point совсем просто. Достаточно передать […]

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

18 October, 2007 (22:44) | Решения упражнений | 2 comments

Смысл процедуры f заключается в том, что она вызывает процедуру, переданную ей как параметр, с аргументом 2. Таким образом область допустимых значений аргумента функции f – множество всех одноаргументных функций, которые нормально воспринимают значение аргумента, равное 2. Сама функция f явно не удовлетворяет этому условию (принимает не числовой аргумент, а функцию). То есть вызов f для […]

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

18 October, 2007 (21:49) | Решения упражнений | 3 comments

Процедура, реализующая фильтрующий аккумулятор, будет иметь следующий вид: (define (filtered-accumulate combiner null-value term a next b filter)   (if (> a b)       null-value       (if (filter a)           (combiner (term a)                     (filtered-accumulate combiner null-value term (next a) next b filter))           (filtered-accumulate combiner null-value term (next a) next b filter)))) Сумма квадратов простых […]

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

18 October, 2007 (21:24) | Решения упражнений | 3 comments

Вот теперь мы сведем сложение и умножение фактически к одному процессу. Разница в реализации будет минимальная, что подтверждает близость этих понятий. Сначала запишем процедуру accumulate в двух вариантах, порождающих соответственно рекурсивный и итеративный процессы. Рекурсивный вариант: (define (accumulate combiner null-value term a next b)   (if (> a b)       null-value       (combiner (term a) […]