Skip to content

Instantly share code, notes, and snippets.

@yakreved
yakreved / sicp_2_1
Created August 13, 2013 07:16
sicp 2.1
(define (make-rat n d)
(if (> d 0)
(cons n d) (cons (* -1 n) (* -1 d))
))
(define (numer x) (car x))
(define (denom x) (cdr x))
(define (mul-rat x y)
@yakreved
yakreved / sicp_2_2
Created August 13, 2013 07:18
sicp 2.2
(define (make-segment s e) (cons s e))
(define (start-segment x) (car x))
(define (end-segment x) (cdr x))
(define (midpoint-segment x) (/ (+ (start-segment x) (end-segment x)) 2))
(define (print-point p)
(newline)
(display "(")
(display (start-segment p))
(display ",")
(display (end-segment p))
@yakreved
yakreved / sicp_2_3
Created August 13, 2013 07:19
sicp 2.3
;(define (make-point s e) (cons s e))
;(define (point-x z) (car z))
;(define (point-y z) (cdr z))
;
;(define (make-pryam point1 point3) (cons point1 point3))
;(define (get-point1 x) ( car x))
;(define (get-point3 x) ( cdr x))
;(define (get-length x) (abs (- (point-x (get-point1 x)) (point-x (get-point3 x)))))
;(define (get-heigth x) (abs (- (point-y (get-point1 x)) (point-y (get-point3 x)))))
@yakreved
yakreved / sicp_2_4
Created August 13, 2013 07:19
sicp 2.4
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
(car (cons 1 2))
(car (cons 3 5))
@yakreved
yakreved / sicp_2_5
Created August 13, 2013 07:21
sicp 2.5
(define (cons x y)
(* (expt 2 x) (expt 3 y)))
(define (factor base value)
(define (factor-iter value counter)
(if (= (remainder value base) 0)
(factor-iter (/ value base) (+ counter 1))
counter))
(factor-iter value 0))
@yakreved
yakreved / sicp_2_6
Created August 13, 2013 07:22
sicp 2.6
(define zero (lambda (f) (lambda (x) x)))
(define one
(lambda (f) (lambda (x) (f x))))
(define two
(lambda (f) (lambda (x) (f (f x)))))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
(define zero??
@yakreved
yakreved / sicp_2_7
Created August 13, 2013 07:36
sicp 2.7 Программа Лизы неполна, поскольку она не определила, как реализуется абстракция интервала. Вот определение конструктора интервала: (define (make-interval a b) (cons a b)) Завершите реализацию, определив селекторы upper-bound и lower-bound.
(define (make-interval a b) (cons a b))
(define (upper-bound x) (car x))
(define (lower-bound x) (cdr x))
(upper-bound (make-interval 4 5))
(lower-bound (make-interval 4 5))
@yakreved
yakreved / sicp_2_8
Last active December 21, 2015 00:18
sicp 2.8 Рассуждая в духе Лизы, опишите, как можно вычислить разность двух интервалов. Напишите соответствующую процедуру вычитания, называемую sub-interval.
(define (make-interval a b) (cons a b))
(define (upper-bound x) (car x))
(define (lower-bound x) (cdr x))
(define (sub-interval a b)
(make-interval
(- (upper-bound a) (lower-bound b))
(- (lower-bound a) (upper-bound b))
)
@yakreved
yakreved / sicp_2_9
Created August 13, 2013 08:11
sicp 2.9 Радиус (width) интервала определяется как половина расстояния между его верхней и нижней границами. Радиус является мерой неопределенности числа, которое обозначает интервал. Есть такие математические операции, для которых радиус результата зависит только от радиусов интервалов-аргументов, а есть такие, для которых радиус результата не …
(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 (sub-interval a b)
(make-interval
(- (upper-bound a) (lower-bound b))
(- (lower-bound a) (upper-bound b))
@yakreved
yakreved / sicp_2_10
Created August 13, 2013 08:37
sicp 2.10 Бен Битобор, системный программист-эксперт, смотрит через плечо Лизы и замечает: неясно, что должно означать деление на интервал, пересекающий ноль. Модифицируйте код Лизы так, чтобы программа проверяла это условие и сообщала об ошибке, если оно возникает.
(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