LINUX.ORG.RU

Haskell. Советы начинающему функционалу.


0

0

Здравствуйте, Господа.

В последнее время интересуюсь функциональным программированием. Не могли бы вы рассказать в общих чертах:

1 - свои впечатления после применения данного подхода 2 - с чего начать изучение 3 - ФИЛП и ООП это взаимоисключающие вещи? 4 - для решения каких задачь, по вашему мнению, подходит Haskell? 5 - с какими языками Haskell конкурирует? 6 - можно ли (и если можно, то целесообразно ли) писать на С++ в функциональном стиле?

anonymous

2. google "Introduction to Functional Programming" (это правда по ML), "Yet Another Haskell Tutorial", "A Gentle Introlduction" (c haskell.org), haskell.org/hawiki почитай там много полезного + gmane.comp.lang.haskell.cafe

3. FP + OOP = Haskell (есть статья с таким названием). google "Haskell's Overlooked Object System"

4. Там, где требуется обрабатывать сложные структуры данных (как и все ФЯ), е.г. для компиляторов, + для разработки DSL'ей в него же встроенных :-) На haskell.org есть раздел о примененях Haskell'а.

6. Можно. Но чисто функциональные программы на нем писать не стоит, т.к. будет огромное количество копирований структур данных, а компилятор С++ не сможет их заоптимизировать.

ЗЫ: 1 - подход хороший (но ведь не тот ответ, что ты ожидал?) 5 - ИМХО вопрос не совсем корректен.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Спасибо за быстрый ответ.

Такой еще вопрос - можно ли "малой кровью" объединить Haskell и C++? Например какой-либо кусок логической части писать на Haskell, а пользовательский интерфейс и т.д. на C++?

Можно ли, например, написать DLL для Windows используя исключительно Haskell, или нужно "оборачивать" его в С?

anonymous
()

Впечатления от Хаскелля самые приятные - я уже успел поюзать его в одном проекте на работе, хотя с привязыванием его к сюшным библиотекам придется пару дней разбиратья...

Изучал в основном по Yet Another Haskell Tutorial, потом немного читал Gentle Intr., многие советуют книгу School of Expression но у меня ее пока нет =(

Реализация классов в языке и отсутствие ооп очень радует.

Конкурирует наверно с лиспом, окамлом. Правда он в отличие от них чисто функциональный.

Если интересно бытсродействие - см. тут - http://shootout.alioth.debian.org/sandbox/haskell.php

Также хочется отметить пару интересных проектов - ОС на хаскелле (!) - http://www.cse.ogi.edu/~hallgren/House/ и hs-plugins (с их помощью можно например выполнять код на хаскелле из String'а или подгружать из исходников во время выполнения) - http://www.cse.unsw.edu.au/~dons/hs-plugins/

AiLr ★★
()
Ответ на: комментарий от Begemoth

Sorry za translit...

OOP v Haskell'e nemnogo drugoe, po sravneniyu s C++, naprimer. Haskell v etom dele bolee... em... algebraichen: tut klass - ne `Sobaka` ili `Koshka`, a `Mozhno slozhit'` ili `Mozhno umnozhit'`. Vo vsiakom sluchae mne tak pokazalos' - mogu i oshibat'sia: opyta ogromnogo net.

Pi ★★★★★
()
Ответ на: комментарий от anonymous

Хаскелль - не ОО язык. Попробую объяснить... Классы в нем отдаленно напоминают интерфейсы с возможностью реализовать тела функций... Не, на самом деле все очень просто ;), в общем почитай YAHT.

AiLr ★★
()
Ответ на: комментарий от Pi

Pi, вы писали: > tut klass - ne `Sobaka` ili `Koshka`, a `Mozhno slozhit'` ili `Mozhno umnozhit'

То есть получается что классы в случае c Haskell, это классификация по свойствам которыми обладает объект?

Типа - объект "камень" производится классами: делимый, перемещаемый... и т.д.

Я приблизительно правильно понял?

anonymous
()
Ответ на: комментарий от AiLr

>Классы в нем отдаленно напоминают интерфейсы с возможностью реализовать тела функций...

Vot imenno!

Pi ★★★★★
()

2) с соответствующей математики - то есть с лямбда-исчисления

3) нет не взаимоисключающие. ООП прекрасно формулируется в терминах ФП.

4) писать компиляторы, интерпретаторы, сложные логические приложения (автоматическое доказательство и верификация), вообще быстрое прототипирование для любой области

5) не конкурирует, он пожрал всех конкурентов (Гоферы и прочие Hope)

6) можно, см. boost/lambda.

ebuilder
()
Ответ на: комментарий от Pi

Я в курсе. Но не будем забывать про existensial datatypes. Это хоть и расгирение Haskell98, но (вроде) широко поддерживаемое.

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

Если нужна именно DLL, то только через FFI. Но не следует забывать про средства IPC.

Begemoth ★★★★★
()
Ответ на: комментарий от ebuilder

Но зато есть языки на Haskell основанные - например, Curry - функционально-логический язык.

Да и не сказал бы я, что Haskell пожрал не чисто функциональные языки (ocaml тот же).

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Да, думаю окамл никто и не пожрет, пока что популярного софта на нем даже больше - mldonkey, advi, unison, из всего на хаскелле я только darcs в Дебиане встречал...

AiLr ★★
()

Я бы посоветовал сначала прочитать SICP и поиграться со scheme, потому что он более строен, прост и логичен для начинающего. После этого изучение Haskell пойдет гораздо легче, потому что большая часть концепций уже будет знакома. Из учебников по Haskell - Yet Another Haskell Tutorial как минимум один из лучших.

grob ★★★★★
()
Ответ на: комментарий от anonymous

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

AiLr ★★
()
Ответ на: комментарий от AiLr

Кстати gtk2hs один из наиболее динамично развивающихся биндингов к gtk2 (не считая тех, что входят в GNOME Platform Bindings).

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

Легко. C++ слишком низкоуровневый для столь узкоспециализированной задачи.

ebuilder
()
Ответ на: комментарий от grob

> Я бы посоветовал сначала прочитать SICP и поиграться со scheme,

или с ocaml, но SICP - это must read в не зависимости от языка

Begemoth ★★★★★
()

1) приятно
2) с начала. Yet Another Haskell Tutorial, например.
3) нет. См. OCaml, где есть C++-like обьекты и весь набор функциональщины
4) А почти любых
5) А что значит "конкурирует"? По какому параметру?
6) Не представляю, как в С делать currying, lazy evaluation, first-class functions... Хотя я не С-шник и вообще не программист.

Zulu ★★☆☆
()
Ответ на: комментарий от Zulu

> currying, lazy evaluation, first-class functions...

см Boost (вопрос был про С++)

> 3) нет. См. OCaml, где есть C++-like обьекты и весь набор функциональщины

см на existensial datatypes и heterogemous collections в Haskell да и в SICP показано, что ООП есть частный случай ФП

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Спасибо всем ответившим огромное за помощь, буду разбираться :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.