Полное соответствие
Полное соответствие
Завершая обсуждение ковариантности, полезно понять, как общий метод можно применить к решению достаточно общей проблемы. Метод появился как результат Кэтколл-теории, но может использоваться в рамках базисного варианта языка без введения новых правил.
Пусть существуют два согласованных списка, где первый задает лыжников, а второй - соседа по комнате для лыжника из первого списка. Мы хотим выполнять соответствующую процедуру размещения share, только если она разрешена правилами описания типов, которые разрешают поселять девушек с девушками, девушек-призеров с девушками-призерами и так далее. Проблемы такого вида встречаются часто.
Возможно простое решение, основанное на предыдущем обсуждении и попытке присваивания. Рассмотрим универсальную функцию fitted (согласовать):
fitted (other: GENERAL): like other is
-- Текущий объект (Current), если его тип соответствует типу объекта,
-- присоединенного к other, иначе void.
do
if other /= Void and then conforms_to (other) then
Result ?= Current
end
end
Функция fitted возвращает текущий объект, но известный как сущность типа, присоединенного к аргументу. Если тип текущего объекта не соответствует типу объекта, присоединенного к аргументу, то возвращается Void. Обратите внимание на роль попытки присваивания. Функция использует компонент conforms_to из класса GENERAL, выясняющий совместимость типов пары объектов.
Замена conforms_to на другой компонент GENERAL с именем same_type дает нам функцию perfect_fitted (полное соответствие), которая возвращает Void, если типы обоих объектов не идентичны.
Функция fitted - дает нам простое решение проблемы соответствия лыжников без нарушения правил описания типов. Так, в код класса SKIER мы можем ввести новую процедуру и использовать ее вместо share, (последнюю можно сделать скрытой процедурой).
safe_share (other: SKIER) is
-- Выбрать, если допустимо, other как соседа по номеру.
-- gender_ascertained - установленный пол
local
gender_ascertained_other: like Current
do
gender_ascertained_other := other .fitted (Current)
if gender_ascertained_other /= Void then
share (gender_ascertained_other)
else
"Вывод: совместное размещение с other невозможно"
end
end
Для other произвольного типа SKIER (а не только like Current) определим версию gender_ascertained_other, имеющую тип, закрепленный за Current. Гарантировать идентичность типов нам поможет функция perfect_ fitted.
При наличии двух параллельных списков лыжников, представляющих планируемое размещение:
occupant1, occupant2: LIST [SKIER]
можно организовать цикл, выполняя на каждом шаге вызов:
occupant1.item.safe_share (occupant2.item)
сопоставляющий элементы списков, если и только если их типы полностью совместимы.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
10.8.3.1. Плохие родители: полное игнорирование потомков
10.8.3.1. Плохие родители: полное игнорирование потомков Простейшим действием, которое вы можете сделать, является изменение действия для SIGCHLD на SIG_IGN. В этом случае завершившиеся потомки не становятся зомби. Вместо этого статус их завершения отбрасывается, и они полностью
Полное решение
Полное решение function init() {// выходим, если функция уже выполняласьif (arguments.callee.done) return;// устанавливаем флаг, чтобы функция не исполнялась дваждыarguments.callee.done = true;// что-нибудь делаем};/* для Mozilla/Firefox/Opera 9 */if (document.addEventListener) {document.addEventListener("DOMContentLoaded", init, false);}/* для Internet Explorer *//*@cc_on @*//*@if
10.14 Соответствие требованиям разработчика
10.14 Соответствие требованиям разработчика Текущий стандарт TCP требует, чтобы реализации твердо придерживались процедуры медленного старта при инициализации соединения и использовали алгоритмы Керна и Джекобсона для оценки тайм-аута повторной отправки данных и
Питер Нортон, Джон Поль Мюллер Полное руководство по Microsoft Windows XP
Питер Нортон, Джон Поль Мюллер Полное руководство по Microsoft Windows XP Эта книга – мой подарок дядюшке Бобу ко дню его рождения. Пусть их у него будет как можно
Полное входное сопротивление в цепях с двумя ветвями
Полное входное сопротивление в цепях с двумя ветвями В предыдущей схеме результаты достаточно просто можно было найти и без использования Probe. В более сложной схеме (рис. 2.19) найти полное входное сопротивление вручную достаточно трудно. При использовании же Probe
Полное сопротивление нагрузки, обеспечивающее максимальную передаваемую мощность
Полное сопротивление нагрузки, обеспечивающее максимальную передаваемую мощность На рис. 2.9 главы 2 показан последовательный контур, предназначенный для определения полного сопротивления нагрузки, при котором в ней обеспечивается максимальная мощность. Используем
Приложение В Соответствие правил во втором и третьем изданиях
Приложение В Соответствие правил во втором и третьем изданиях Третье издание «Эффективного использования C++» во многом отличается от второго, так как содержит много новой информации. Однако большая часть материала из второго издания осталась и в третьем, хотя часто и в
14.5. Проверка документа XML на соответствие определению DTD
14.5. Проверка документа XML на соответствие определению DTD ПроблемаТребуется проверить документ XML на соответствие DTD.РешениеИспользуйте библиотеку Xerces с парсером SAX2 (простой программный XML-интерфейс) или с парсером DOM.Для проверки документа XML при использовании SAX2 получите
14.6. Проверка документа XML на соответствие схеме
14.6. Проверка документа XML на соответствие схеме ПроблемаТребуется подтвердить соответствие документа XML схеме, представленной в рекомендациях XML Schema 1.0.РешениеИспользуйте библиотеку Xerces совместно с программным интерфейсом SAX2 или с парсером DOM.Подтверждение
Соответствие между типами библиотеки базовых классов .NET, C# и CIL
Соответствие между типами библиотеки базовых классов .NET, C# и CIL В табл. 15.4 показано соответствие между типами базовых классов .NET и ключевыми словами C#, а также между ключевыми словами C# и командами CIL. Там же представлены сокращенные обозначения констант, используемые для
3.1. Модель данных и ее соответствие модели процессов
3.1. Модель данных и ее соответствие модели процессов Функциональная модель BPwin является основой для построения модели данных. Действительно, не имея информации о том, как работает предприятие, бессмысленно строить модель данных. Для построения модели данных удобно
А.2.6.3 Соответствие (Conformance)
А.2.6.3 Соответствие (Conformance) Атрибуты программного обеспечения, которые заставляют программу подчиняться стандартам или соглашениям, относящимся к
StereoMeet: «Полное стереографическое безобразие» Юрий Ильин
StereoMeet: «Полное стереографическое безобразие» Юрий Ильин Конференция StereoMeet, посвящённая технологиям трёхмерного кино, прошла 28 апреля, в московском зале «Амфитеатр» – том же самом, где всякий раз проводится небезызвестный слёт специалистов по компьютерной
2.7. Проверяем соответствие реальных параметров ПК заявленной конфигурации
2.7. Проверяем соответствие реальных параметров ПК заявленной конфигурации Внимание! Материал данного раздела предусматривает наличие минимальных навыков работы с компьютером. Если у вас таковых нет, можете смело его пропустить — когда прочитаете несколько следующих