Это цитата из SICP о принуждении. В этом разделе рассказывается о арифметическом пакете с обычными числами, рациональными и комплексными числами и делать операции поперечного типа на них (например, добавление комплексного числа к обычному числу.) СхемаСоздание процедур принуждения в SICP
Это принуждение имеет много преимуществ по сравнению с методом определения явных операций перекрестного типа, как описано выше. Хотя нам еще нужно написать процедуры принуждения для связывания типов (возможно, N^2 процедур для системы с N типами), нам нужно написать только одну процедуру для каждой пары типов, а не другую процедуру для каждой коллекции типов и каждой общей операции.
Я запутался в этой строке:
«возможно, N^2 процедуры для системы с типами N»
Давайте арифметический пример пакета. Операции, которые делятся двумя обычными числами (номер схемы схемы), двумя рациональными числами (рациональным рациональным) и двумя комплексными числами (сложным комплексом), являются одинаковыми типами, поэтому они не включены в процедуры принуждения.
У нас есть три типа, это процедуры принуждения, которые я могу представить только с двумя аргументами.
(схема номер рациональные) (схема номер комплекс) (рациональная схема номер) (рациональный комплекс) (комплексная схема-номер) (комплексный рациональный)
Это не п^2 процедуры принуждения. Здесь всего шесть процедур принуждения, а не 9. Я думаю, что я вообще не понимаю эту часть текста. Может кто-нибудь объяснить, что я пропустил?
Наконец, вот сноска относительно этой части текста.
Если мы умны, мы можем обычно проходить с использованием N^2 принуждения процедур. Например, если мы знаем, как конвертировать из типа 1 в тип 2 и от типа 2 к типу 3, то мы можем использовать эти знания для преобразования из типа 1 в тип 3. Это может значительно уменьшить количество процедур принуждения нам нужно явно указать, когда мы добавим в систему новый тип . '
Из того, что я понимаю, если мы можем преобразовать обычное число в рациональное число, тогда преобразуем это рациональное число в комплексное число, нам не нужна процедура, которая превращает обычный в комплекс. Это правильно?
Может ли кто-нибудь объяснить это более четко?
Я думаю, что цитата подсчитывает (номер схемы схемы), (рациональное рациональное) и (сложный комплекс) тоже. – jkiiski
@jkiiski вот что я и думал. Но принуждение определяется как «преобразовать объект одного типа в эквивалентный объект другого типа», однако не упоминается о принуждении двух аргументов с одинаковыми типами и игнорировании его, когда не требуется преобразовывать типы. Это самоочевидно? – morbidCode
Я на самом деле не читал SICP, поэтому не могу сказать точно, но я думаю, автор ссылался на общий объем процедур в круглых скобках, а не на процедуры принуждения. Может быть, он просто упростил это, потому что говорить «N^2 процедуры» проще, чем говорить «N * (N-1) процедуры принуждения плюс N procdures для тех же самых типов». – jkiiski