Category: SICP

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

11 February, 2008 (21:15) | Решения упражнений | No comments

Очень показательное упражнение, которое одновременно является достаточно простым. SICP продолжает радовать.
Итак, как будут выглядеть операции проверки принадлежности множеству, добавления элемента, пересечения и объединения множеств в случае, если элементы в списке, представляющем множество, могут повторяться?
Во-первых, я хочу заметить, что мы можем вообще ничего не менять: старые операции работают корректно и на новом представлении множеств. Но это не единственный […]

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

11 February, 2008 (20:43) | Решения упражнений | 2 comments

Для реализации операции объединения множеств мы можем применить рекурсивную стратегию, близкую по задумке к той, которая приводится при описании операции пересечения множеств в тексте книги. А именно, воспользуемся следующими тремя правилами при объединении множеств set1 и set2:

Если set1 пусто, то объединение set1 и set2 есть set2.
Если элемент x из set1 содержится в set2, то объединение set1 и set2 - это то же, что и объединение set1 […]

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

10 February, 2008 (13:01) | Решения упражнений | 5 comments

Начнем с более простой части А упражнения. При записи в инфиксной форме с расстановкой всех скобок операции сложения и умножения принимают всегда по два аргумента. Причем порядок следования элементов в списке всегда такой: первый аргумент, знак операции, второй аргумент.
Таким образом мы сразу же достаточно прямолинейным способом получаем определения предикатов, селекторов и конструкторов (в конструкторах […]

Видео лекции SICP. Самые первые впечатления.

9 February, 2008 (13:22) | Видео, Материалы | 3 comments

Итак, после сегодняшней счастливой развязки истории с заказом дисков с видео Абельсона и Сассмана я успел только бегло проглядеть сами видео-ролики. Потому впечатления, которые есть у меня сейчас, предельно поверхностны и наверняка очень субъективны. Тем не менее, считаю, что есть смысл ими поделиться хотя бы для того, чтобы потом после более близкого знакомства оценить степень […]

Как получить видео лекции SICP, если у вас нет безлимитки. Часть 3.

9 February, 2008 (13:02) | Видео, Материалы | 2 comments

Окончание истории. Начало читайте здесь, а продолжение здесь.
Субботним зимним утром я отправился на почтовое отделение с целью получить свои законные диски с видео-материалами SICP, которые по всем расчетам просто обязаны были дойти до нашей забытой богом почты.
После непродолжительного разбирательства выяснилось, что бандероль действительно уже пришла и ждет своего адресата. Заплатив 42 гривны 10 копеек (чуть […]

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

8 February, 2008 (22:10) | Решения упражнений | 1 comment

Как требуется в условии упражнения, будем менять только конструкторы и селекторы для суммы и произведения так, чтобы сделать возможной работу с произвольным числом слагаемых и множителей. Начнем с суммы.
Мы будем представлять сумму как список из символа + и последующего произвольного количества слагаемых. 
Селектор addend вообще не меняется:
(define (addend s) (cadr s))
Селектор augend будет возвращать либо одно последнее […]

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

8 February, 2008 (21:33) | Решения упражнений | 1 comment

Сначала модифицируем процедуру deriv с тем, чтобы она распознавала и операцию возведения в степень:
(define (deriv exp var)
  (cond ((number? exp) 0)
        ((variable? exp)
         (if (same-variable? exp var) 1 0))
        ((sum? exp)
         (make-sum (deriv (addend exp) var)
                   (deriv (augend exp) var)))
        ((product? exp)
         (make-sum
           (make-product (multiplier exp)
                         (deriv (multiplicand exp) var))
           (make-product (deriv (multiplier exp) var)
                         […]

Как получить видео лекции SICP, если у вас нет безлимитки. Часть 2.

7 February, 2008 (23:23) | Видео, Материалы | 1 comment

Продолжение истории. Начало читайте здесь.
При столкновении красивой теории с жестокой реальностью рождается горькая практика. В моем случае оптимистичные ожидания получить диски с видео лекций курса “Структура и интерпретация компьютерных программ” еще к концу прошлой недели не оправдались.
Сегодня прошло 9 дней с момента отправки бандероли, и я посетил свое почтовое отделение, ожидая обнаружить диски […]

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

7 February, 2008 (21:29) | Решения упражнений | No comments

В примечании 34 описывается особая форма quote и идентичность ее действия кавычке. Кроме того, указывается, что знак кавычки является просто сокращением для формы quote. Таким образом запись
(car ”abracadabra)
является лишь сокращенной формой записи для выражения
(car (quote (quote abracadabra)))
Первая quote заставляет интерпретатор понимать остаток записи буквально как список. Вполне очевидно, что для этого списка операция car возвращает символ […]

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

7 February, 2008 (21:23) | Решения упражнений | 1 comment

В соответствии с примечанием реализуем процедуру equal? таким образом, чтобы она корректно работала и с числами тоже. Отметим также, что мы считаем два пустых списка эквивалентными.
Процедуру equal? можно определить таким образом:
(define (equal? a b)
  (or (and (null? a)
           (null? b))
      (and (number? a)
           (number? b)
           (= a b))
      (and (symbol? a)
           (symbol? b)
           (eq? a […]