|
| |||
|
|
Там есть довольно интересная и мощная объектность, я может потом разрожусь описанием. Но "канонический" ML-ный подход к параметризации кода - параметризованные модули (ака функторы). Примеры - например в стандартной либе Map и Set. Ну и просто полиморфные функции и замыкания. На них можно много чего изобразить, на самом-то деле: например функция-счетчик (выдает последовательные значения): let counter = let n = ref 0 in fun () -> incr n; !n Оно конечно императивно, но счетчик полностью инкапсулирован. PS: Хвостовую рекурсию сворачивают все функциональные языки, это просто требование - иначе нельзя быть уверенным что не влетишь в переполнение стека. Добавить комментарий: |
||||