Итак, я опытный программист ООП (прежде всего С++), только сейчас начинаю окунаться в функциональное программирование. По моему мнению, в чисто функциональной парадигме функции не должны иметь условностей и должны быть разбиты как можно больше, используя currying. Может ли кто-нибудь предоставить мне "чистую" функциональную версию следующего примера? Предпочтительно использовать любую строгую технику, которая будет частью функциональной парадигмы:
let rec greatestCommonFactor a b =
if a = 0 then b
elif a < b then greatestCommonFactor a (b - a)
else greatestCommonFactor (a - b) b