|
|
| Строка 1: |
Строка 1: |
| {{locked|anon}}[[Изображение:Nerd-46422.jpg|thumb|Типичный программист на Haskell]]
| | <noinclude><table cellpadding=0 cellspacing=0 style="border: 1px dotted black; border-left: none; position: absolute; z-index: 99;"><td valign=center width=1% style="background-color: #ff6060; color: #ffffff; font-family: Old English Text MT; font-size: 50px; font-weight: bold;" title="Уведомление"> ! </td><td style="padding: 23px 6px 20px 6px; font-size: 120%;"><b>Абсурдопедия переехала и теперь находится по адресу [[:pt:ru:Заглавная_страница|absurdopedia.net]].</b><br />См. [[:pt:ru:{{PAGENAME}}|http://absurdopedia.net/wiki/{{PAGENAME}}]]</td></table><hr /></noinclude> |
| [[Изображение:Z150 03.jpg|thumb|Ещё один [http://thesz.livejournal.com/911142.html типичный программист] на Haskell]]
| |
| {{Q|Хаскель — это как ламборджини в деревне. Немного подрочил — и пошел работать на тракторе.| Ксеноцефал}}
| |
| '''Haskell''' — функциональный декларативный язык [[Программист|программирования]], первая версия которого была стандартизирована в 1990 году, назван в честь математика Хаскелла Карри <!--- , придумавшего слово <s>манда</s> «монада». Или не придумавшего<ref>Типа он раньше Лейбница жил, да? Монада (от греч. — μονας, род. п. μοναδος — единица, единое), понятие, обозначающее в различных философских учениях основополагающие элементы бытия: число в пифагореизме; единое в неоплатонизме; единое начало бытия в пантеизме Дж. Бруно; психически активная субстанция в монадологии Г. В. Лейбница, воспринимающая и отражающая другую монаду и весь мир («монада зеркало Вселенной»).</ref>. Но придумавшего [[:en.w:Currying|карринг]]. Или не придумавшего<ref>Also sprach wikipedia: Карринг (англ. currying) — понятие, введённое Моисеем Исаевичем [[ЕРЖ|Шейнфинкелем]] и Г. Фреге, является преобразованием функции от пары аргументов в функцию, берущую свои аргументы по одному. Это преобразование получило свое название в честь Х. Карри.</ref>. Но разработавшего теорию категорий для объяснения значения этих слов. Или не разработавшего<ref>Х. Карри занимался комбинаторной логикой, и к теории категорий имеет весьма опосредованное отношение. Кому особо интересно — см. [[:en.w:Category theory#Historical notes|тут]] и [[:en.w:Haskell Curry|тут]].</ref> --->. Язык Haskell известен благодаря синтаксису, в сравнении с которым [[пёрл]] выглядит псевдокодом, а также необходимостью глубокого понимания лямбда-исчисления, замыканий, теории графов, теории категорий, сопромата, анатомии мозга и прочего [[матан]]а даже для вывода на экран строки «Hello, World!»
| |
| {{note|yt|E1FPSeF4-xM|На самом деле, все просто}} | |
| == История ==
| |
| [[Изображение:Cmp.jpg|thumb|Наглядная демонстрация Мощи языка]]
| |
| В 1958 году был изобретён первый функциональный язык программирования — [[Лисп|Lisp]]. К 80-м годам прошлого века функциональных языков стало очень много. Каждый [[задрот]] считал своим долгом изобрести свой. И вот однажды, в 1987 году было решено создать язык, который бы включал лучшие достижения из всех языков программирования. Собрался специальный комитет из отборнейших [[задрот|задротов]] и без лишнего шума создали его. Предшественниками хаскеля были ML, SML, Miranda. Кроме того туда добавили немного лиспа, пролога, [[матан|матана]] и ещё чего-то там. Что касается названия, то однажды во время пьянки задроты просто взяли и выбрали общим голосованием «хаскель» из 25 [[рандом|рандомных]] слов. [http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/history.pdf Читай @ просвещайся].
| |
| | |
| == Хаскель, чаны и все-все-все ==
| |
| Хаскель и [[лисп]] — популярные и постоянные мемы в /[[s]]/ и /[[prog]]/. Как это сочетается с большой популярностью хаскеля в очень узкой академической среде — [[Всем похуй|не ясно]].
| |
| | |
| == Востребованность ==
| |
| | |
| Как и положено в таких вещах, ярость отдельных сторонников языка обратно пропорциональна его востребованности на рынке. Согласно проведенным с участием авторитетных анонимусов исследованиям, в мире на данный момент насчитывается [http://www.haskell.org/haskellwiki/Jobs около 8] реальных вакансий для программистов на хаскеле. В остальных случаях знание хаскеля рассматривается, как правило, как незначительный плюс. Известен случай, когда знание хаскеля рассматривался как существенный недостаток кандидата{{prooflink}}.
| |
| | |
| Не будем забывать, что хаскель наиболее активно разрабатывается в недрах Microsoft Research. Nuff Said. Обыдленный хаске...[[^W]] ML под названием F# включен в Visual Studio 2010, а это значит что скоро знание хаскеля будет как минимум преимуществом при поступлении на работу.
| |
| | |
| == Примеры кода на Haskell ==
| |
| Так на haskell пишут [[перл]]овцы:
| |
| <source 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}
| |
| </source> | |
| [[Hello world]]:
| |
| <source haskell>
| |
| main = print "Hello world"
| |
| </source> | |
| Для олдфагов:
| |
| <source haskell>
| |
| {-# 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!"
| |
| </source> | |
| Вычисление факториала:
| |
| <source haskell>
| |
| fac n = product [1..n]
| |
| </source> | |
| А так его пишут [[нуб]]ы:
| |
| <source haskell>
| |
| fac n = if n == 1 then 1 else (fac n-1) * n
| |
| </source>
| |
| Так — продвинутые нубы:
| |
| <source haskell>
| |
| fac 1 = 1
| |
| fac n = fac (n-1) * n
| |
| </source>
| |
| Любители [[матан]]а:
| |
| <source haskell>
| |
| 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)))
| |
| </source>
| |
| [http://www.willamette.edu/~fruehr/haskell/evolution.html Ну и так далее].
| |
| | |
| А это программа на Haskell, которая выводит программу на Python, которая выводит программу на Ruby, которая выводит исходную программу на Haskell.
| |
| <source 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"
| |
| </source>
| |
| | |
| {{Шаблон:Языки программирования}}
| |
| | |
| [[Категория:Языки программирования]]
| |
| [[en.w:Haskell]]
| |
| [[de.w:Haskell]]
| |
| [[w:Haskell]]
| |
| [[uk.w:Haskell]]
| |