metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-18 09:22 am

Наибольший общий предок

Ребенок периодически компостирует мне мозги задачами на сложение чисел. Пока это просто числа, оно еще куда ни шло, но потом ей становится скучно и она добавляет к ним размерности, причем разные. Типа "сколько будет 3 воздушных шарика+2 бабочки".
Только сейчас спросонья дошло, что можно же свести объекты к общему предку и дать ответ в виде "число+тип предка". Ну как в скале - если в список добавить разных объектов, она автоматом тип к более общему сведет.
Но скажем, если из общего предка там только "объект", но у объектов есть общие свойства, например бабочки и шарики могут летать - не надо ли, в дополнение к объекту выводить еще и общие интерфейсы? В таком случае будет ответ "5 летающих объектов".

[identity profile] thedeemon.livejournal.com 2013-04-18 06:51 am (UTC)(link)
А почему он больший, а не меньший?

[identity profile] xeno-by.livejournal.com 2013-04-18 07:09 am (UTC)(link)
Никогда не задумывался, если честно. Просто когда слышишь least upper bound буквально каждый день, запоминается. Да и сабтайпинг в Скале обозначается как <:, что как бы намекает.

Я полагаю, что это из-за того, что сабтайпинг рассматривается как отношение предпорядка, обычно обозначаемое как ≤. А так как top это супертайп для любого типа, значит он меньше всех. Но это исключительно мои догадки.
Edited 2013-04-18 07:09 (UTC)

[identity profile] metaclass.livejournal.com 2013-04-18 07:20 am (UTC)(link)
Least upper - тут получается "самый низкий из высоких". И top по идее, как раз больше всех.
Т.е получается bottom <: обычные типы <: top

[identity profile] xeno-by.livejournal.com 2013-04-18 07:23 am (UTC)(link)
Да, фейспалм, спасибо за то, что поправил.

[identity profile] gds.livejournal.com 2013-04-18 09:04 am (UTC)(link)
а в окамле coercion обозначается как :> , что соответствует логике: уменьшает (точнее, не увеличивает) количество известной информации. Для объектов -- выкидывает методы. Для вариантов -- добавляет новые варианты, "размазывая" знание (раньше было известно, что A | B, а стало A | B | C, и неуверенность в том, к какому же варианту принадлежит значение типа, возросла, и без рантайм-движух (поматчить) не сведётся обратно к A | B).