|
|
|
technologer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.9.2012 Репутация: нет Всего: нет |
Доброе всем время суток!
Пытаюсь понять что такое FP на примере OCaml, переписывая небольшой утилитарный скрипт с императивного языка. Проблемы начались сразу: - не получается придумать как легко и дёшево разобрать параметры коммандной строки - получается только с использованием ссылок:
Если уже в этом простом случае приходится использовать мутабельные конструкции, то какое дальше может быть FP? Подскажите, чего я делаю не так. |
|||
|
||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
Возьмите erlang. Там гораздо меньшэ мутабельных конструкцый, потому таких вопросов не встаёт. ВСё-таки у lisp и ocaml слишком просто писать в императивном стиле (а в haskell вообще тяжэло писать, хоть как-то, и поначалу получается ад, а clean я не знаю).
|
|||
|
||||
technologer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.9.2012 Репутация: нет Всего: нет |
Ну не верю я, что есть что-то такое в Erlang, чего нет в OCaml, и без чего нельзя вышеприведённый код перегнать в немутабельный вид.
Люди, вон говорят, что код чуть ли не копипастили с Haskell в OCaml для повышения производительности - и всё заработало (а haskell вроде чисто-фукциональный язык) Т.е. "В OCaml много мутабельных функций" != "В OCaml невозможно кодить функционально" И всё-тки нужен OCaml Это сообщение отредактировал(а) technologer - 25.9.2012, 19:40 |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Чисто функциональный пример на Хаскелле (без использования исключений): http://ideone.com/5dGQB
На Окамле будет примерно так: http://ideone.com/HFtWW Добавлено через 3 минуты и 18 секунд
Но это и не значит, что нужно кодить функционально везде, где только можно. Кстати про Ocaml vs Haskell можно почитать здесь. Точнее почему в итоге чел сменил окамл на хаскелл. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
technologer |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.9.2012 Репутация: нет Всего: нет |
k0rvin, спасибо!
Теперь гораздо понятнее что такое функциональный подход. Только вот как брать теперь эти значения из списка. Самое первое что приходит в голову - это сделать функцию, берующую значение из списка по ключу. Видимо, так и придётся сделать.
Так про какой угодно подход можно сказать. Проблема была в том, что не понимал как это вообще сделать функционально.
Нисколько не сомневаюсь, что Haskell круче OCaml в функциональном плане, но OCaml выглядит практиченее/производительнее + проект в который тянет залезть с напильником написан на OCaml Это сообщение отредактировал(а) technologer - 26.9.2012, 15:12 |
||||
|
|||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Вообще-то там по ссылке как раз про практичность/производительность. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
technologer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.9.2012 Репутация: нет Всего: нет |
А вот здесь наоборот, начинали на Haskell, а потом перешли на OCaml из-за производительности
Кое-что про Erlang P.S. Наверно это не важно, но на всякий случай: конструкция
не срабатывала, пока не заменил "==" на "=", а так всё работает как ожидалось Это сообщение отредактировал(а) technologer - 27.9.2012, 18:26 |
|||
|
||||
Правила форума «Функциональные языки: общие вопросы» | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |