Факториал в Haskell
Пример для версий
GHC 6.10.4,
GHC 6.6.1
Используется рекурсивное определение факториала. Пример состоит из трех частей:
-
определение функции
factorial, принимающей на вход один аргумент типаInteger(целое число неограниченной точности) и имеющей выход того же типа. Функция определяется рекурсивно, тип параметров задан в явном виде, чтобы избежать неоднозначности их определения. -
определение функции
line, которая выводит на печать число и его факториал в нужном формате. Использование командыprintfаналогично языку C++. -
собственно вывод чисел и их факториалов. Для этого командой
[0..16]создается список чисел от 0 до 16, включительно. Функция двух аргументовmapприменяет первый аргумент (функциюline) к каждому элементу второго аргумента (списка[0..16]) и в результате создает список так называемых действий вывода (являющихся в Haskell обычными значениями). Для того, чтобы объединить эти действия в одно, используется командаsequence_, которая, будучи применена к списку действий, выполняет первое действие из списка и затем рекурсивно применяет себя к хвосту списка.
module Main where
import Text.Printf
factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n * factorial (n - 1)
line x = printf "%d! = %d\n" x $ factorial x
main = sequence_ $ map line [0..16]
Комментарии
]]>blog comments powered by Disqus
]]>