История изменений
Исправление MOPKOBKA, (текущая версия) :
Ты много написал о рекурсии, но меня интересовала лишь тема рекурсии в типах функций. Для меня никакой магии тут нету, я заранее знал что некоторые языки ее не пройдут, а другие пройдут. Пример намеренно находится на удалении от темы.
Но если говорить о самой рекурсии в движении:
В питоне ты, допустим, можешь в каждой функции хранить свой тип и в результате получить список.
А какая реализация в С++? Нужно либо тег добавлять, либо заранее знать как построен список по типам. В OCaml можно и тег добавить (std::variant), и статически такой список выразить (через длинный тип функций которые возвращают std::tuple + хвост из других функций и std::tuple).
Не говоря о том, что он не осилил это без явного указания на rec.
Ты про let rec? Оно только на область видимости влияет, будет ли переменная видна в правой части.
В дин-языках(и окампл это он и есть. Прикрученный стат-анализ не делает его статическим. Как не делает тот же тайпскрипт) он скидывается на рантайм.
В OCaml нету виртуальных функций, типы тоже не сохраняются в runtime, там только боксинг для сложных типов.
Самое простое - в си нельзя выразить рекурсивную структуру.
В OCaml тоже, как и в С нужно добавить «указатель», в случае с OCaml это может быть Optional.
Исходная версия MOPKOBKA, :
Ты много написал о рекурсии, но меня интересовала лишь тема рекурсии в типах функций. Для меня никакой магии тут нету, я заранее знал что некоторые языки ее не пройдут, а другие пройдут. Пример намеренно находится на удалении от темы.
Но если говорить о самой рекурсии в движении:
В питоне ты, допустим, можешь в каждой функции хранить свой тип и в результате получить список.
А какая реализация в С++? Нужно либо тег добавлять, либо заранее знать как построен список по типам. В OCaml можно и тег добавить (std::variant), и статически такой список выразить (через длинный тип функций которые возвращают std::tuple + хвост из других функций и std::tuple).
Не говоря о том, что он не осилил это без явного указания на rec.
Ты про let rec? Оно только на область видимости влияет, будет ли переменная видна в правой части.
В дин-языках(и окампл это он и есть. Прикрученный стат-анализ не делает его статическим. Как не делает тот же тайпскрипт) он скидывается на рантайм.
В OCaml нету виртуальных функций, типы тоже не сохраняются в runtime, там только боксинг для сложных типов.