Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Выводы в статье делаются правильные, и тема связи семантики, типов и дуальности, сама по себе, очень интересная. Но не покидает ощущение, что примеры на Haskell немного не в тему. Всё-таки, рассматриваемые паттерны существенно опираются на побочные эффекты и изменение состояния. Синтаксис Haskell очень хорош, не спорю, он и создавался для подобных рассуждений, но с точки зрения семантики, он тут ни при чём. В рамках чистого функционального программирования, приводимые типы либо населены крайне скудно и тривиально, либо, как в случае с () -> t, и вовсе соответствуют Void. Возможно, лучше было бы ограничиться формальными математическими обозначениями или диаграммами.
completed :: () -> ()
next :: t -> ()
MoveNext' :: Bool -> ()
Смысл в том, что бинарная неопределенность теряется, поэтому boolean не нужен: речь о «функции без параметров»
Если мы понимаем нашу прямую задачу линейного программирования как классическую задачу «распределения ресурсов», двойственную ей задачу можно интерпретировать как задачу «оценки ресурсов».
Чтобы найти обратную функцию, нужно решить уравнение y=f(x) относительно x. Если оно имеет более чем один корень, то функции, обратной к f не существует.
Таким образом, функция обратима на интервале тогда и только тогда, когда на этом интервале она взаимно-однозначна.
MoveNext :: () -> Boolbool = x.moveNext(); (1)
«Свет мой — зеркальце! — скажи, да дуал мой покажи...»: спроектируй один хороший фреймворк и получи второй в подарок