Comments 52
Какое адское чтиво на ночь. Спасибо за проделанную работу.
Очень интересно, Но, все таки, слишком сжато
Не пытайтесь читать Haskell вслух, можно ненароком что-нибудь вызвать :)
Не думаю, что я бы много понял из этой статьи, если бы не знал Haskell до ее прочтения. Очень сумбурное изложение в стиле «а еще под нашу музыку можно много чего делать» ©
Я не знаю Haskell, да и с функциональными языками сталкивался только в теории, но вроде смысл понятен, хотя синтаксис для меня очень и очень необычный.
Я за то, чтобы у людей был выбор.
На русском не так уж много туториалов по Хаскелу. А RWH и YAHT больше по объему и не всегда проще.
На русском не так уж много туториалов по Хаскелу. А RWH и YAHT больше по объему и не всегда проще.
Ести замечательная и бесплатная онлайн книга для изучения Haskell, правда на английском. learnyouahaskell.com/chapters
Спасибо. Сложновато, но в целом понять можно.
> Многие из этих концепций помогут вам стать лучшим программистом
Вы хотели сказать более лучшим?)
> Вызов чистой функции с одними и теми же параметрами всегда даст один и тот же результат.
Math.random?
> Многие из этих концепций помогут вам стать лучшим программистом
Вы хотели сказать более лучшим?)
> Вызов чистой функции с одними и теми же параметрами всегда даст один и тот же результат.
Math.random?
random — не чистая функция)
Я, в принципе, так и подумал. Просто написано не очень точно.
> Haskell проводит четкую границу между чистыми функциями и функциями, производящими сайд эффекты.
Получается, любая функция, которая не производит сайд-эффекты — чистая
> Haskell проводит четкую границу между чистыми функциями и функциями, производящими сайд эффекты.
Получается, любая функция, которая не производит сайд-эффекты — чистая
В определенном смысле, так и есть. Потому что без общения с внешним миром или сохранения внутренного состояния реализовать рандом невозможно.
Во второй части будет более четкое деление. Math.random на самый страшный вариант.
Как насчет readline?
Как насчет readline?
Хоть это и перевод статьи и это в самой статье не сказано, но может в комментариях кто-то объяснит какие концепции из того же Haskell смогут пригодится в том же императивном программировании. Сам вот сейчас немного Haskell изучаю потихоньку в свободное время.
Функции высших порядков и ленивость. Остальное, вроде бы, применять не получится.
Впрочем, и то и другое вряд ли можно назвать концепцией из haskell.
Впрочем, и то и другое вряд ли можно назвать концепцией из haskell.
Монады, монады же.
LINQ — чистой воды монада, Async штуки очень хорошо описаются монадами.
Функциональный взгляд на проблему может упростить многое. Идеи используются не только в Хаскеле, но он — самый мощный на данный момент функциональный язык.
Чистые функции == легкое тестирование, уменьшение головняка при параллелизации (Erlang)
Функции высшего порядка == удобная композиция (jQuery)
МонадЫ == еще более удобная композиция (LINQ, Rx ..)
Вывод типов — это просто надо прочуствовать.
Я планирую сделать еще один перевод, там будет функциональный подход в Javascript. На простом примере пошагово будут показаны многие плюшки функциональности.
LINQ — чистой воды монада, Async штуки очень хорошо описаются монадами.
Функциональный взгляд на проблему может упростить многое. Идеи используются не только в Хаскеле, но он — самый мощный на данный момент функциональный язык.
Чистые функции == легкое тестирование, уменьшение головняка при параллелизации (Erlang)
Функции высшего порядка == удобная композиция (jQuery)
МонадЫ == еще более удобная композиция (LINQ, Rx ..)
Вывод типов — это просто надо прочуствовать.
Я планирую сделать еще один перевод, там будет функциональный подход в Javascript. На простом примере пошагово будут показаны многие плюшки функциональности.
Вывод типов — это просто надо прочуствовать.
Лучший способ проникнуться величием системы типов в Haskell — почитать исходники SAGE, относящиеся к определению базового кольца и конструктору матриц. Написано оно на Python, и начинаешь задумываться, стоит ли в действительности достигаемая гибкость такой запутанности кода, когда имеется Haskell.
Более лучшим специально не хотел писать после «стали жить более лучше» :)
О мой мозг! Какой ужасный прекрасный язык!
>Имея список целых чисел, необходимо посчитать сумму четных чисел в списке.
В JavaScript тоже можно писатьfold reduce.
В JavaScript тоже можно писать
var numlist = [1,2,3,4,5];
function sumFn(a,b) { return a + b }
function even(a) { return a % 2 == 0 }
var sum = numlist.filter(even).reduce(sumFn, 0);
console.log(sum);
Javascript — очень красивый функциональный язык. По сути такой fold можно написать на любом языке, поддерживающем ФВП.
Но для этого надо понимать что такое ФВП и зачем они нужны. А введения в JS не рассказывают об этом.
stay tuned, скоро будет статья по функциональному JS :)
Но для этого надо понимать что такое ФВП и зачем они нужны. А введения в JS не рассказывают об этом.
stay tuned, скоро будет статья по функциональному JS :)
Собственно, в realworldhaskell показывается, как все эти красивые функции писать на чистом haskell.
Например,
Например,
my_foldl :: (a -> b -> a) -> a -> [b] -> a
my_foldl f a [] = a
my_foldl f a (x:xs) = my_foldl f (f a x) xs
Выложили бы это добро в fb2/mobi/epub — цены бы не было.
кстати, на викибукс есть викиучебник по хаскелю в формате pdf, сверстанный под 6-дюймовые читалки…
Я конвертер недавно выкладывал.
Да, помню его. Я получил книжку 130 Мб и так её и не попробовал на читалке открыть.
Думаю проще отдельно книгу сделать из HTML, чем всё избранное сейчас прогонять. Но всё равно спасибо за полезную вещь.
Думаю проще отдельно книгу сделать из HTML, чем всё избранное сейчас прогонять. Но всё равно спасибо за полезную вещь.
Спасибо за статью!
Прошу прощения, у меня у одного примеры скачиваются с кучей HTMLя?
Прошу прощения, у меня у одного примеры скачиваются с кучей HTMLя?
Расширение lhs означает «Literate HaSkell» (см. на википедии и на haskel.org).
Спасибо за статью, ждем продолжения!
ЗЫ: Не совсем функционально, зато рекурсивно и в одну строчку :)
ЗЫ: Не совсем функционально, зато рекурсивно и в одну строчку :)
int sum(int* x)
{
return x[0]?(((x[0]%2)?0:x[0])+sum(x+1)):0;
}
Почти полный копипейст с книги. Стыдоба.
Большущее спасибо за перевод, на досуге попробую придумать не математические задачи, где может понадобиться Haskell и реализовать их )
P.S. Думаю, имеет смысл добавить ссылку на вторую статью.
P.S. Думаю, имеет смысл добавить ссылку на вторую статью.
Какое ацкое чтиво солнечным утром четверга :-D Спасибо за перевод, интересный материал =)
Вообще, программа, выводящая введенное имя с приветствием на python состоит из 1-й строки и выглядит как-то так:
print("Privet, " + input("enter your name: "))
Я понимаю что статье — много лет, но вот я набрёл на неё, а ссылка на Real World Haskell — не работает :(
Сначала я огорчился, но потом случайно набрёл на работающую ссылку.
Надеюсь, это она: book.realworldhaskell.org
Сначала я огорчился, но потом случайно набрёл на работающую ссылку.
Надеюсь, это она: book.realworldhaskell.org
Sign up to leave a comment.
Через тернии к Haskell. 1/2