Haskell

Материал из Lurkmore
Перейти к навигации Перейти к поиску
Хаскель — это как ламборджини в деревне. Немного подрочил — и пошел работать на тракторе.
 
Типичный программист на Haskell
Типичный программист на Haskell

Типичный программист на Haskell

Ещё один типичный программист на Haskell
Ещё один типичный программист на Haskell

Ещё один типичный программист на Haskell

Haskell — функциональный декларативный язык программирования, первая версия которого была стандартизирована в 1990 году, назван в честь математика Хаскелла Карри. Язык Haskell известен благодаря синтаксису, в сравнении с которым пёрл выглядит псевдокодом, а также необходимостью глубокого понимания лямбда-исчисления, замыканий, теории графов, теории категорий, сопромата, анатомии мозга и прочего матана даже для вывода на экран строки «Hello, World!»

История

В 1958 году был изобретён первый функциональный язык программирования — Лисп. К 80-м годам прошлого века функциональных языков стало очень много. Каждый задрот считал своим долгом изобрести свой. И вот однажды, в 1987 году было решено создать язык, который бы включал лучшие достижения из всех языков программирования. Собрался специальный комитет из отборнейших задротов и без лишнего шума создали его. Предшественниками хаскеля были ML, SML, Miranda. Кроме того туда добавили немного лиспа, пролога, матана и ещё чего-то там. Что касается названия, то однажды во время пьянки задроты просто взяли и выбрали общим голосованием «хаскель» из 25 рандомных слов. Читай @ просвещайся.

Хаскель, чаны и все-все-все

Наглядная демонстрация мощи языка

Хаскель и лисп — популярные и постоянные мемы в /s/ и /prog/. Как это сочетается с большой популярностью хаскеля в очень узкой академической среде — не ясно.

Также на Хаскеле пишут движки для имиджборд.

Востребованность

Как и положено в таких вещах, ярость отдельных сторонников языка обратно пропорциональна его востребованности на рынке. Согласно проведенным с участием авторитетных анонимусов исследованиям, в мире на данный момент насчитывается около 8 реальных вакансий для программистов на хаскеле. В остальных случаях знание хаскеля рассматривается, как правило, как незначительный плюс.

Не будем забывать, что хаскель наиболее активно разрабатывается в недрах Microsoft Research. Nuff Said. Обыдленный хаске…^W ML под названием F# включен в Visual Studio 2010, а это значит, что скоро знание хаскеля будет как минимум преимуществом при поступлении на работу.

Примеры кода на Haskell

Так на haskell пишут перловцы:

 import Random;import List;import Char;p=putStrLn;u=uncurry;f x=(x\\).(x\\)
 main=mapM(\x->randomRIO(49,54))[1..4]>>=n 0.map chr>>=p.("Tries: "++).show
 e=((partition$u(==)).).zip;h(p,q)=['*'|x<-p]++['+'|x<-(u f)$unzip q]
 n a s=getLine>>=m where{m i|i==s=return a;m i=p(h$e i s)>>n(a+1)s}

Hello world:

main :: IO ()
main = putStrLn "Hello, world!"

Для олдфагов:

{-# OPTIONS_GHC -fno-warn-type-defaults #-}
{-# LANGUAGE ExtendedDefaultRules, OverloadedStrings #-}
module Hello where
import Language.BASIC

main :: IO ()
main = runBASIC $ do

    10 PRINT "Hello BASIC World!"

Вычисление факториала:

fac n = product [1..n]

А так его пишут нубы:

fac n = if n == 1 then 1 else (fac n-1) * n

Так — продвинутые нубы:

fac 1 = 1
fac n = fac (n-1) * n

Любители матана:

s f g x = f x (g x)
k x y = x
b f g x = f (g x)
c f g x = f x g
y f = f (y f)
cond p f g x = if p x then f x else g x
fac = y (b (cond ((==) 0) (k 1)) (b (s (*)) (c b pred)))

Ну и так далее.

А это программа на Haskell, которая выводит программу на Python, которая выводит программу на Ruby, которая выводит исходную программу на Haskell.

q a b c=putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']
main=q "q a b c=putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']" "def q(a,b,c):print b+chr(10)+'q('+repr(b)+','+repr(c)+','+repr(a)+')'" "def e(x) return 34.chr+x+34.chr end;def q(a,b,c) print b+10.chr+'main=q '+e(b)+' '+e(c)+' '+e(a)+' '+10.chr end"


ae:Haskell urban:Haskell en.w:Haskell de.w:Haskell w:Haskell uk.w:Haskell

Loading comments...