В F # необходимо использовать rec
ключевое слово. В Haskell нет необходимости явно указывать, является ли данная функция рекурсивной или нет.
Учитывая роль рекурсии в функциональном программировании, дизайн F # кажется мне довольно странным. Это хорошее решение для разработки языка или оно существует только по историческим причинам или из-за ограничений реализации?
источник
На этот вопрос ответили на SO , и он включает в себя некоторые серьезные исторические предпосылки для того, почему используется «rec».
Вот важная цитата для потомков:
источник
Рекурсив
let
определяет значительно более сложную семантику, чем нормальная. Поэтому, для простоты и ясности языкового дизайна, есть веская причина иметь и то, и другое, как разделениеlet
, такlet*
иletrec
в Scheme.Простое
let x = y in z
эквивалентно((fun x -> z) y)
. Рекурсивное let намного сложнее и может включать использование комбинатора с фиксированной точкой.источник