Skip to content

Instantly share code, notes, and snippets.

@yakreved
yakreved / sicp_2_77
Last active December 22, 2015 01:18
sicp 2.77
У Хьюго Дума не получается вызвать магнитуду потому, что для неё не определён комплексный селектор. Добавление Лизы это исправляет. Теперь первый раз applugeneric идёт для типа complex, второй раз для типа retangular, а дальше диспетчирует к его процедуре magnitude.
@yakreved
yakreved / sicp_2_76
Created August 30, 2013 23:16
sicp 2.76
1. Обобщённые данные с явной диспетчеризацией:
а) При добавлении типа:
Добавить специфичные методы этого типа
Изменить обобщённые методы с учётом нового типа
б) При добавлении операции:
Добавить специфичную для него реализацию
Добавить обобщённую реализацию
2. Стиль, управляемый данными:
а) При добавлении типа:
Добавить пакет операций для нового типа
@yakreved
yakreved / sicp_2_75
Created August 30, 2013 23:04
sicp 2.75
(define (make-from-mag-ang r a)
(define (dispatch op)
(cond ((eq? op 'real-part) (* r (cos a)))
((eq? op 'imag-part) (* r (sin a)))
((eq? op 'magnitude) r)
((eq? op 'angle) a)
(else
(eror "Unknown op -- MAKE-FROM-MAG-ANG" op))))
dispatch)
@yakreved
yakreved / sicp_2_74
Created August 30, 2013 22:47
sicp 2.74
;-------------put-get-----------------------------------------
(define global-array '())
(define (make-entry k v) (list k v))
(define (key entry) (car entry))
(define (value entry) (cadr entry))
(define (put op type item)
(define (put-helper k array)
(cond ((null? array) (list(make-entry k item)))
@yakreved
yakreved / sicp_2_73
Created August 30, 2013 20:14
sicp 2.73
;a Предикаты number? и variable? не содержат операцию, по которой собственно и происходит диспетчеризация.
;bc
;-------------put-get-----------------------------------------
(define global-array '())
(define (make-entry k v) (list k v))
(define (key entry) (car entry))
(define (value entry) (cadr entry))
@yakreved
yakreved / sicp_2_70
Created August 30, 2013 18:18
sicp 2.70
(define (make-leaf symbol weight)
(list 'leaf symbol weight))
(define (leaf? object)
(eq? (car object) 'leaf))
(define (symbol-leaf x) (cadr x))
(define (weight-leaf x) (caddr x))
(define (adjoin-set x set)
(cond ((null? set) (list x))
((< (weight x) (weight (car set))) (cons x set))
@yakreved
yakreved / sicp_2_68_2_69
Created August 30, 2013 18:08
sicp 2.68 2.69
(define (make-leaf symbol weight)
(list 'leaf symbol weight))
(define (leaf? object)
(eq? (car object) 'leaf))
(define (symbol-leaf x) (cadr x))
(define (weight-leaf x) (caddr x))
(define (adjoin-set x set)
(cond ((null? set) (list x))
((< (weight x) (weight (car set))) (cons x set))
@yakreved
yakreved / sicp_2_67
Created August 30, 2013 15:19
sicp 2.67
(define (make-leaf symbol weight)
(list 'leaf symbol weight))
(define (leaf? object)
(eq? (car object) 'leaf))
(define (symbol-leaf x) (cadr x))
(define (weight-leaf x) (caddr x))
(define (make-code-tree left right)
(list left
right
@yakreved
yakreved / sicp_2_66
Created August 29, 2013 20:16
sicp 2.66
(define (entry tree) (car tree))
(define (left-branch tree) (cadr tree))
(define (right-branch tree) (caddr tree))
(define (make-tree entry left right)
(list entry left right))
(define tree1 (make-tree 7
(make-tree 3
(make-tree 1 '() '())
@yakreved
yakreved / sicp_2_65
Created August 29, 2013 17:30
sicp 2.65
(define (entry tree) (car tree))
(define (left-branch tree) (cadr tree))
(define (right-branch tree) (caddr tree))
(define (make-tree entry left right)
(list entry left right))
(define (tree->list tree)
(define (copy-to-list tree result-list)
(if (null? tree)
result-list