Факториал в FP
Пример для версий
Interactive FP
Этот пример определяет четыре функции — две по необходимости, и две для читабельности. Все они принимают на вход скалярные значения; seq
возвращает последовательность скаляров, остальные три — скаляры.
-
zero
проверяет, равен ли ее аргумент нулю; -
dec
уменьшает аргумент на единицу; -
seq
возвращает<0>
, если ее аргументx
равен нулю, и результат примененияseq
к(x-1)
с присоединенным справаx
иначе (если мы развернем это рекурсивное определение, мы получим просто последовательность<0 1 … x>
) . -
factorial
возвращает 1, если ее аргументx
равен нулю, и результат примененияfactorial
к(x-1)
, умноженный наx
, иначе.
Последняя строка примера применяет factorial
к каждому элементу последовательности, полученной применением seq
к входному параметру — 16. Следует отметить, что все матеметические операции возвращают числа с плавающей запятой, поэтому результат выполнения программы будет иметь следующий вид:
< 1 1.0 2.0 6.0 24.0 120.0 720.0 5040.0 40320.0 362880.0 3628800.0 3.99168E7 4.790016E8 6.2270208E9 8.7178289E10 1.30767428E12 2.09227885E13 >
{ zero ( = @ [id, %0] ) }
{ dec ( - @ [id, %1] ) }
{ seq ( zero -> %<0> ; apndr @ [ seq @ dec , id ] ) }
{ factorial ( zero -> %1 ; * @ [id, factorial @ dec ] ) }
&factorial @ seq:16
Комментарии
]]>blog comments powered by Disqus
]]>