Skip to content

Instantly share code, notes, and snippets.

@yakreved
yakreved / sicp_2_11
Created August 13, 2013 09:03
2.11 Проходя мимо, Бен делает туманное замечание: «Если проверять знаки концов интер- валов, можно разбить mul-interval на девять случаев, из которых только в одном требуется более двух умножений». Перепишите эту процедуру в соответствии с пред- ложением Бена.
(define (make-interval a b) (cons a b))
(define (upper-bound x) (car x))
(define (lower-bound x) (cdr x))
(define (width x) (- (cdr x) (car x)))
(define (mul-interval x y)
(let ((p1 (* (lower-bound x) (lower-bound y)))
(p2 (* (lower-bound x) (upper-bound y)))
(p3 (* (upper-bound x) (lower-bound y)))
@yakreved
yakreved / sicp_2_12
Created August 13, 2013 23:20
sicp 2.12
(define (make-interval a b) (cons a b))
(define (upper-bound x) (car x))
(define (lower-bound x) (cdr x))
(define (width x) (- (cdr x) (car x)))
(define (mul-interval x y)
(let ((p1 (* (lower-bound x) (lower-bound y)))
(p2 (* (lower-bound x) (upper-bound y)))
(p3 (* (upper-bound x) (lower-bound y)))
@yakreved
yakreved / sicp_2_13
Created August 13, 2013 23:30
sicp 2.13
(define (make-interval a b) (cons a b))
(define (upper-bound x) (car x))
(define (lower-bound x) (cdr x))
(define (width x) (- (cdr x) (car x)))
(define (center i)
(/ (+ (lower-bound i) (upper-bound i)) 2))
(define (make-center-percent c p)
(let ((w (* c (/ p 100))))
@yakreved
yakreved / sicp_2_15
Created August 13, 2013 23:45
sicp 2.15
(define (par1 r1 r2)
(div-interval (mul-interval r1 r2)
(add-interval r1 r2)))
(define (par2 r1 r2)
(let ((one (make-interval 1 1)))
(div-interval one
(add-interval (div-interval one r1)
(div-interval one r2)))))
@yakreved
yakreved / sicp_2_16
Created August 14, 2013 00:00
sicp 2.16
;Эквивалентные алгебраические выражения могут давать различные результаты потому-что для нашей интервальной арифметики
;не работает дистрибутивность (и возможно ещё какие-нибудь св-ва обычной арифметики).
;написание пакета для работы с интервальной арифметикой, не обладающего данным недостатком осложняется
;сведением всех выражений к какому-то общему виду, либо вычислением погрешностей отдельно от основной арифметики.
@yakreved
yakreved / sicp_2_17
Created August 14, 2013 01:56
sicp 2.17 Последний элемент
(define (last-pair items)
(define (length-iter a prev)
(if (null? a)
prev
(length-iter (cdr a) (car a))))
(length-iter items 0))
(last-pair (list 23 72 149 34))
@yakreved
yakreved / sicp_2_18
Created August 14, 2013 02:09
sicp 2.18 reverse list
(define (reversel l)
(if (null? l)
l
(append (reversel (cdr l)) (list (car l)))
)
)
(reversel (list 1 4 9 16 25))
@yakreved
yakreved / sicp_2_20
Created August 15, 2013 19:49
sicp 2.20
(define (same-parity x . y)
(define (f l)
(cond ((null? l) x)
((= (remainder x 2) (remainder (car l) 2)) (cons (car l) (f (cdr l))))
(else (f (cdr l)
)
)))
(f y)
)
@yakreved
yakreved / sicp_2_21
Created August 15, 2013 20:14
sicp 2.21
(define (square-list items)
(if (null? items)
()
(cons (* (car items) (car items)) (square-list (cdr items))))
)
(define (square-list1 items)
(map (lambda (x)(* x x)) items))
(square-list (list 1 2 3 4))
@yakreved
yakreved / sicp_2_22
Created August 15, 2013 22:35
sicp 2.22
В первом случае программа Хьюго работает неверно, потому, что он склеивает элементы в обратном порядке,
а во втором потому, что вторым аргументом в cons он передаёт число, а первым - список.