PDA

Просмотр полной версии : Haskell


Rooslan Khayrov
02.04.2009, 22:29
А где его взять и где взять инструкции по применению?
Haskell (http://www.haskell.org/), Glasgow Haskell Compiler (http://www.haskell.org/ghc/), Hugs interpreter (http://www.haskell.org/hugs/).
Из документации порекомендую книгу Real World Haskell (http://book.realworldhaskell.org/) и Yet Another Haskell Tutorial (http://www.haskell.org/haskellwiki/YAHT). Вообще, информации более чем достаточно, по крайней мере на английском, а математического подспорья вам не занимать :-)

Nadir Zaitov
03.04.2009, 20:16
Haskell Начал издеваться над этой игрушкой! Пока в полном шоке. Работает удивительно быстро... кстати с целыми числами любой длинны!!! 2^20000 (полный экран цифр) подсчитал залпом. (кое в чем не разобрался - часто ругается по пустякам). ЕС, присоединяйтесь! Это вот удовольствие!

Evgeniy Sklyarevskiy
04.04.2009, 00:24
ЕС, присоединяйтесь! Это вот удовольствие!
Заманчиво. А можно в 2х словах, чтобы не гуглить - это интерпретатор или среда обработки? Есть ли графический вывод у языка? Чем он лучше прочих языков?

Nadir Zaitov
04.04.2009, 12:33
Чем он лучше прочих языков?

Вот описание фнкционального программирования (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D 0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0 %BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%B E%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5).

Вот учебник по функциональному программированию (http://ru.wikibooks.org/wiki/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D1%84%D1%83% D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1 %8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%BE%D0% B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2 %D0%B0%D0%BD%D0%B8%D1%8F).

Haskell - это функциональный язык программирования. Посмотрите как написана программка выше. А ведь там есть переполнение разрядной сетки - для обычных программ - это головная боль да и только. В Haskell не бывает обычного кода в обычном понимании (с переменными, циклами, ветвлениями). Все описывается ввиде деффиниций в математике - во всяком случае очень близко. Даже сначала писать программы тяжело получается для людей привыкших думать переменными, а не функциональностью программы. Главное - скорость разработки вычислительных программ (даже по решению головоломок!) - она огромная. Понятий "переполнение разрядной сетки" не бывает, пока у вас хватает выделенной оперативной памяти, чтобы это число поместить !!!!

Например, 2^100000 там существует в целочисленном представлении!!!

Думаю - это все игрушки для математических гурманов... я думаю (пока не знаю как), но задачка с 9 гирями в Haskell решалась бы без заумного написания кода - просто на уровне простых определений, а их там не много... грубо говоря "тупой" код типа перебора haskell пишет за вас.

Помните выражение - правильная постановка задачи - половина ее решения. Так вот Haskell - это вторая половина решения задач, если есть корректная для Haskell постановка.
Графический вывод есть. Это все отдельные библиотеки, но они для меня пока темный лес, хотя заточены под математиков (думаю график там построить трехмерный или куб в пространстве крутить не проблема - но это только смутные догадки :) Надо читать).

Rooslan Khayrov, дал ссылки на 3 варианта: интерпретатор только, интерпретатор+компилятор, компилятор только :) На любителя. Среду разработки придется искать самим... пока "играюсь" в простом "Блакноте" от windows, но скорее всего скачаю понимающий синтаксис haskell редактор... уж больно умный. А так в моем варианте (GHCi) haskell работает от командной строки... как в старом добром Basic MSX, но это издержки (программный продукт свободный - никто встроенный GUI видимо не писал) - решается нормальным редактором...

Nadir Zaitov
04.04.2009, 12:45
А можно в 2х словах Нашел в 2-х словах: В отличие от императивного стиля, описывающего шаги, ведущие к достижению цели, функциональный стиль описывает математические отношения между данными и целью..... без написания как это отношение достигается.

Rooslan Khayrov
04.04.2009, 18:17
Nadir Zaitov, оффтоп жестокий пошёл, может разделить тему и перенести, скажем, с этого (http://uforum.uz/showthread.php?p=199640#post199640) сообщения в «Программирование» (http://uforum.uz/forumdisplay.php?f=145)?

Я вижу вас особенно поразила встроенная поддержка длинной арифметики :-) Это на самом деле отнюдь не привилегия Haskell или функциональных языков вообще. Целые типы неограниченной размерности есть в Python, Ruby, Erlang, многих диалектах LISP, даже в gawk, не к ночи будь помянут. Как и во многих других языках, длинная арифметика в Haskell, по крайней мере в GHC, основана на библиотеке GMP (http://gmplib.org/) — быстрейшей в своём роде.
Haskell позволяет принести свободу от переполнений в жертву скорости, явно указав тип фиксированной размерности:
Prelude> let a = 0x10000; b = 0x10000 in a * b -- x :: Num t => t по умолчанию принимает тип Integer
4294967296
Prelude> let a = 0x10000 :: Int; b = 0x10000 :: Int in a * b -- на 32-битной машине
0
Думаю - это все игрушки для математических гурманов... я думаю (пока не знаю как), но задачка с 9 гирями в Haskell решалась бы без заумного написания кода - просто на уровне простых определений, а их там не много... грубо говоря "тупой" код типа перебора haskell пишет за вас.
Помните выражение - правильная постановка задачи - половина ее решения. Так вот Haskell - это вторая половина решения задач, если есть корректная для Haskell постановка.
Не стоит приписывать Haskell такие свойства, никакого «решателя», как скажем в Prolog, там нет. Только функции, которые он позволяет записывать очень компактно и выразительно. В первом приближении это синтаксический сахар над типизированным лямбда-исчислением.

Чем Haskell отличается от прочих функциональных языков:
1. Мощная система типов. Классы типов, семейства типов, обобщённые алгебраические типы и другие страшные слова, которые позволяют творить весьма интересные абстракции. Исключительно важно то, что в Haskell чистота функций поддерживается на уровне системы типов. Чистый функциональный язык предусматривает т.н. ссылочную прозрачность (referential transparency): при одних и тех же аргументах функция всегда вернёт одно и то же значение, т.е. нет никакого глобального состояния. Очевидно, что в реальном мире программа обязана как-то взаимодействовать с ним, например, выполнять ввод-вывод. Функция, выполняющая ввод-вывод, или изменяющая переменные, зависит от глобального состояния и не является чистой. И это свойство отражено в её типе. Нельзя вызвать «грязную» функцию из чистой (хотя можно наоборот) — это должно отразиться на типе.
2. Ленивость. Вычисления в Haskell происходят только тогда, когда это необходимо. На практике это означает возможность с лёгкостью обращаться с циклическими и потенциально бесконечными структурами данных. Например, в программке на задачу о числах Фибоначчи, эти самые числа представлены как рекурсивно определенный бесконечный список, из которого по предикату отбирается ровно столько, сколько нужно. А в задачке про блины (http://uforum.uz/showthread.php?p=197434#post197434) мы создаём два бесконечных списка — потока событий — смешиваем их сортировкой слиянием, преобразуем в новый поток событий, снова смешиваем и в конце концов вычисляем только необходимую часть.
Графический вывод есть. Это все отдельные библиотеки, но они для меня пока темный лес, хотя заточены под математиков (думаю график там построить трехмерный или куб в пространстве крутить не проблема - но это только смутные догадки :) Надо читать)
Библиотеки есть самые разнообразные, в том числе и для графики: посмотрите на список пакетов Hackage (http://hackage.haskell.org/packages/archive/pkg-list.html), которые можно автоматически установить с помощью системы Cabal.
В корне неверно воспринимать Haskell как узкоспециализированный язык для математических расчётов и логических задачек. Это язык общего назначения, и на нём можно написать почти всё — и многое писать удобнее, чем на других языках, осмелюсь заметить :-)
Rooslan Khayrov, дал ссылки на 3 варианта: интерпретатор только, интерпретатор+компилятор, компилятор только :) На любителя.
Вроде только два: компилятор GHC с интерпретаторм GHCi в комплекте и интерпретатор Hugs. Я лично предпочитаю GHC, как стандарт де-факто, единственное преимущество Hugs — малый размер и портируемость.
Среду разработки придется искать самим... пока "играюсь" в простом "Блакноте" от windows, но скорее всего скачаю понимающий синтаксис haskell редактор... уж больно умный. А так в моем варианте (GHCi) haskell работает от командной строки... как в старом добром Basic MSX, но это издержки (программный продукт свободный - никто встроенный GUI видимо не писал) - решается нормальным редактором...
IDE к сожалению нет. Лучшее, что сейчас может претендовать на это звание — haskell-mode для Emacs. Я лично обхожусь простым текстовым редактором (gedit или jedit). Несколько специализированных редакторов в процессе разработки (на самом же Haskell!): Yi (http://haskell.org/haskellwiki/Yi), Leksah (http://www.leksah.org/). Есть (увы, похоже замороженный) проект интеграции в Eclipse (http://eclipsefp.sourceforge.net/haskell/). Недавно появился простенький WinGHCi (http://code.google.com/p/winghci/).

Nadir Zaitov
05.04.2009, 14:54
Вроде только два: компилятор GHC с интерпретаторм GHCi в комплекте и интерпретатор Hugs. Правильно, а NHC предложил Yet Another Haskell Tutorial... запутался.
корне неверно воспринимать Haskell как узкоспециализированный язык для математических расчётов и логических задачек. Это язык общего назначения, и на нём можно написать почти всё — и многое писать удобнее, чем на других языках, осмелюсь заметить :-) Хотел бы процитировать Википедию (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D 0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0 %BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%B E%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5):
Как правило, интерес к функциональным языкам программирования, особенно чисто функциональным, был сугубо научный, нежели коммерческий. Однако, таким примечательным языкам как Erlang, OCaml, Haskell, Scheme (после 1986) а так же специфическим R (статистика), Mathematica (символическая математика), J и K (финансовый анализ), и XSLT (XML) находили применение в индустрии коммерческого программирования. Всеж я так понял коммерческого применения тут меньше, чем чисто "научного". Могу и ошибаться.

Rooslan Khayrov
21.07.2009, 18:02
За внезапной невозможностью создать новую тему, подниму-ка я эту, и бессовестно пропиарю первый выпуск журнала «Практика функционального программирования» (http://fprog.ru/). Давно мне не встречался столь качественный и объёмный русскоязычный материал.
Выпуск более чем на половину посвящен Haskell, так что за оффтоп считаться никак не может.

Nadir Zaitov
21.07.2009, 18:47
За внезапной невозможностью создать новую тему, подниму-ка я эту, и бессовестно пропиарю первый выпуск журнала «Практика функционального программирования». Давно мне не встречался столь качественный и объёмный русскоязычный материал. Выпуск более чем на половину посвящен Haskell, так что за оффтоп считаться никак не может. Сообщения: 43 Осталось вписать сюда еще 7 постов с интересным контентом и Вы "в теме". После первых 50 постов у Вас открывается возможность пиарить журнал в любом месте :) Спасибо, что вернулись :)