GHC 6.6.1
Версия реализации GHC языка программирования HaskellВерсия GHC 6.6.1 выпущена 26 апреля 2007.
GHC 6.6.1 включает преимущественно исправления ошибок предыдущей версии, функции API практически небыли изменены. Основные изменения относительно версии GHC 6.6:
- GHC работает под ОС Windows Vista
- GHC может генерировать исходный текст на C++
-
добавлены страницы руководства по
ghc
иghci
- новые типы теперь могут быть объявлены с использованием синтаксиса GADT
-
изменены пакеты
base
,Cabal
,Win32
,regex-base
- множество исправлений ошибок
Примеры:
Факториал - Haskell (18):
Используется рекурсивное определение факториала. Пример состоит из трех частей:
-
определение функции
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]
Факториал - Haskell (19):
Функция fac определена как произведение чисел от 1 до n через встроенную функцию языка product.
module Main where
import Text.Printf
fac n = product [1..n]
main = sequence_ $ map (\x -> printf "%d! = %d\n" x $ fac x) [0..16]
Комментарии
]]>blog comments powered by Disqus
]]>