17 декабря 1962 года в журнале Life опубликовали головоломку, текст который приведен ниже:
- На улице расположены пять домов.
- Англичанин проживает в доме красного цвета.
- Испанец держит собаку.
- В доме зелёного цвета пьют кофе.
- Украинец любит чай.
- Дом зелёного цвета расположен сразу справа от дома белого цвета.
- Курящий «Old Gold», разводит улиток.
- В доме жёлтого цвета живёт курящий «Kool».
- В доме по центру пьют молоко.
- Норвежец живёт в доме №1.
- Сосед курящего «Chesterfield», держит в доме лису.
- В доме, соседнем с тем, где держат лошадь, живёт курящий «Kool».
- Курящий «Lucky Strike», любит апельсиновый сок.
- Японец курит «Parliament».
- Норвежец живёт в доме, расположенном рядом с домом синего цвета.
Вопрос: Кто пьёт воду, а кто держит зебру?
Попробуем решить ее с помощью 'Сшивки'.
Можно поразмыслив, нарисовать конечную схему (решение задачи), но так или иначе мы идем последовательно по пунктам. Если быть точным - итеративно, регулярно возвращаемся к первым пунктам, дойдя до конца списка, и выстраиваем целостную картину.
1. Есть 5 объектов класса "Дом"
Имея только эту информацию считаем их одинаковыми, но только нумеруем, чтобы хоть как-то отличать. Нумерация убирает идентичность объектов (функций 'Сшивки'), делает модули уникальными в разрезе текущей задачи. Иначе формирование дальнейших семантических/ресурсных связей будет хаотично, запутанно и не приведет к желаемому результату.
Файл db.txt будет выглядеть так:
Дом1
-
-
Дом2
-
-
...
Дом5
-
-
2. Один из домов имеет красный цвет
Допустим что это будет Дом1.
Дом1
-цвет_красный
-цвет_красный
И тут сразу возникает вопрос - цвет (тип параметра) дома это входной или выходной параметр функции?
Еще интереснее про англичанина - как выразить в виде его параметра "дом красного цвета" да еще связать его с Дом1 у которого цвет это параметр? Дом1 -Дом5 это функции, а не параметры - к ним связей не предусмотрено.
Нужны синонимы, но, скорее всего, тут без подсистем и без того, что программисты называют объектно-ориентированное программирование не обойтись.
Англичанин
-живет-в_дом-красного-цвета
-живет-в_дом-красного-цвета
Здесь так имеется вопрос про вход и выход модуля.
Так как задача скорее абстрактная, то надо переходить к семантическим связям - логике предикатов. Блоки-функции в данном случае являются Классами, которые объединяют набор параметров как логическая операция И. Имеется иерархия классов, наследование параметров и их типов. Параметры (поля классов) имеют лишь направление в семантическом графе. Возможны параметры связанные с функциям, а не с их параметрами (ссылки на объекты).
Семантику в данном случае проще изобразить:
3. Про испанца
4. Кто-то в зеленом доме
Тут система посложнее, потому что объектов и отношений больше. Но все решаемо!
Пришлось вводить объект "Чел 1" (кто-то) типа "Человек". Национальности не знаем. Он пьет напиток "Кофе".
5. Украинец
6. Первое соединение двух высказываний
По итогу 6 высказываний схема выглядит так: