]]> ]]>

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

]]>

Работа программистам