Дзен теоринформатики: пустотность данных

«...А чтобы вас убедить, я вас сейчас напугаю по-настоящему, показав, в каких терминах мы можем построить па́ры. Вы увидите, что — в то время как мы можем строить рациональные числа, отрезки, векторы и тому подобное в терминах пар — сами пары можно строить вообще из ничего. Как чистую абстракцию.

Давайте, я покажу вам слайд с реализацией CONS, CAR и CDR. Мы еще к ней вернемся, но — смотрите! — здесь не видно никаких данных, здесь видна только λ. Эта CONS будет возвращать процедуру, которая возвращает процедуру (так же, как возвращала процедуру AVERAGE):

(define (cons a b)
        (λ (pick)
           (cond ((= pick 1) a)
           ((= pick 2) b))))
(define (car x) (x 1))
(define (cdr x) (x 2))

CONS с аргументами A и B возвращает процедуру с параметром PICK, которая гласит: „Если PICK равен 1, я верну A, а если PICK равен 2, я верну B“, и именно она и будет CONS. CAR от X, от пары X, будет X, примененной к 1. Вам, возможно, непонятно, почему или как я это сделал, но это по крайней мере осмысленно, так как то, что конструируется посредством CONS, является процедурой, и CAR применяет ее к 1.

Подобным образом, CDR применяет ее к 2. Хорошо, я утверждаю, что это является представлением CONS, CAR и CDR, и заметьте, что никаких данных здесь нет. Что все это значит? Ну, если вы верите в то, чем мы занимаемся, тогда вы должны быть уверены, что для того, чтобы показать, что это есть представление CONS, CAR и CDR, мне достаточно лишь показать, что оно удовлетворяет аксиоме:

Аксиома о парах
Для любых x и y
(car (cons x y)) равняется x
(cdr (cons x y)) равняется y

...»
Г. Абельсон. Структура и интерпретация компьютерной программы (лекции в «Hewlett-Packard», 1986 г, лекция 2B, 76:00).

This entry was posted in ссылка and tagged , . Bookmark the permalink.

Leave a Reply