|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.12.2012, 10:25 | #1 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Haskell IO чистота чистотой, но ...
Вчера я спокойно пропсиховался во время написания некоторых программ на Haskell. Проблема с которой столкнулся, это использование результатов работы не чистых функций и процедур в этом чистом языке.
Задачи, которые я решал были чрезвычайно просты, это было вычисление факториала, чисел фибоначчи ... Но когда потребовалось реализовать ввод данных с клавиатуры, последовательность случайных чисел которая генерится не от константы, а от функции времени. В общем потерял пару нервных клеток, осталось совсем еще много. В общем вот код: Код:
|
07.12.2012, 08:47 | #2 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
А в чём ваще проблема то?
|
07.12.2012, 14:30 | #3 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Проблема в том, что я не могу просто написать:
Код:
Цитата:
Код:
|
|
07.12.2012, 15:41 | #4 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Почему в не функциональных языках таких проблем не возникает. Это плохо?
|
07.12.2012, 18:57 | #5 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Функция на одни и те же входные данные должна возвращать один и тот же результат. В случае с getClockTime такого не происходит, параметров у нее вообще нет, а результат всегда разный. Поэтому с такими функция особое обращение по средством специального класса IO. Но IO Integer != Integer, хотя можно и написать: Код:
Почему это плохо? Просто если принять это ограничение, на счет однозначном соответствии входных и выходных параметрах, то можно воротить просто невероятные фишки(под впечатлением (= ), которых в классических языках нет, а их реализация будет выражена в сотнях строк кода. Ну например такая конструкция: g (Y g) Подробнее тут Достаточно просто реализовать автоматическое распараллеливание выполнения функций, ведь переменных нет, есть только разовые объекты, которые единожды вычисляются и больше не меняются, ну и еще есть константы. Поэтому многое становится явным и переменные это зло xD, шутка. Понравились вот эти лекции, собственно с них и начал. Еще понравилась книжка "Душкин Р. В. функциональное программирование на языке Haskell", но начать с нее программировать не получилось. Также в скором времени ожидаю приход "Изучай Haskell во имя добра!", по отзывам вроде самое оно. Последний раз редактировалось Kostia; 07.12.2012 в 19:06. |
|
07.12.2012, 19:22 | #6 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
07.12.2012, 21:29 | #7 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Можно main так переписать (если Вы об этом):
Код:
|
11.12.2012, 19:17 | #8 | |||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|||
12.12.2012, 08:14 | #9 | |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Utkin
Цитата:
|
|
12.12.2012, 08:47 | #10 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Упрощение рапараллеливания std::async Т.к. параллелить приложение написанное в функциональном стиле, очень просто, с этим даже компилятор может справиться, то императивные языки наращивают свои библиотеки для программирования в функциональном стиле. (достаточно много нового в <functional> в c++11 появилось) А также расширение в области метапрограммирования и улучшения шаблонов, что привело к появления подобия сопоставления с образцом, вычислению типа возвращаемого значения по типам входных параметров и т.д. В C# есть делигаты, (IMHO) но попахивает функциональщиной xD |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна по haskell | KatrinOops | Помощь студентам | 0 | 28.05.2012 14:38 |
С++ & Haskell | XZentus | Свободное общение | 0 | 24.03.2011 21:44 |
Абстрагирование списков на Haskell | Lakiii | Помощь студентам | 0 | 17.12.2009 15:00 |
Haskell | Katech | Свободное общение | 5 | 12.07.2009 23:40 |
Haskell | Анастасия52 | Помощь студентам | 0 | 05.05.2009 14:09 |