В книге Real World OCaml авторы указывают, почему OCaml использует let rec
для определения рекурсивных функций.
OCaml различает нерекурсивные определения (используя let) и рекурсивные определения (используя let rec) в основном по техническим причинам: алгоритм ввода-вывода должен знать, когда набор определений функций является взаимно-рекурсивным, и по причинам, которые не применяются к чистым языкам, таким как Haskell, они должны быть явно помечены программистом.
Каковы технические причины, налагающие let rec
на чистые функциональные языки?