LINUX.ORG.RU
ФорумTalks

Зачем вообще нужно функциональное программирование?


0

1

И так, вот уже сколько лет прошло с момента выхода первых версий Haskell. И что мы в итоге имеем?

  • XMonad - тайловое поделие для красноглазиков. В силу ущербности языка, для добавления элементарных фишек фреймовых оконных менеджеров нужно переписать ядро;
  • Emacs - тренажер для пианистов от малонужного красноглазого хиппи.
  • Кучка скобочных поделий, не запускающихся без бубна и падающих от каждого чоха
  • Сообщество гиков, мечтающих купить что-нибудь в интернет-магазине, написанном на предмете своего фетиша;
  • Кипы бумаги, имитирующие труды математиков (в реальной жизни без всякого заззрения пишущих на Delphi/Pascal)

Внимание, вопрос - зачем это все нужно, когда есть языки, на которых можно писать полезные для пользователей программы?

★★★
Ответ на: комментарий от AIv

на питоне позволяет писать очень лаконичный код.

Ок. А зачем эта лаконичность нужна — чтоб её потом мозги других людей по 3 часа парсили — что же это оно там делает?
Вот перл тоже позволяет лаконичные однострочники писать.

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

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

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

Вот маленький пример, декартово произвдение произвольного кол-ва последовательностей LL:

>>> LL = [[1,2,3],[4,5,6],[7]]
>>> reduce( lambda R, L : [ r+(v,) for r in R for v in L ], LL, [()] )
[(1, 4, 7), (1, 5, 7), (1, 6, 7), (2, 4, 7), (2, 5, 7), (2, 6, 7), (3, 4, 7), (3, 5, 7), (3, 6, 7)]

Напишите это без функциональщины, я Вас посмеюся...

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

Вложенные мапы?

Что то смущает? Чтение файла с числами в неск. столбцов

map( lambda l : map( float, l.split() ) for l in open('myfile.dat') )

через генератор конечно короче, и можно комментарии и пустые строки фильтровать

[ map( float, l.split() ) for l in open('myfile.dat') if l.strip() and l[0]!='#' ]

AIv ★★★★★
()

А вообще по сабжу, ФП точно нужен для обработки данных (чтобы много не писать). Собственно, я об этом. Но и полезные программы тоже писать через ФП никто не мешает, не знаю почему так никто не делает (я вот иногда применяю ФП, правда языки у меня обычные - PHP, JS, Python, но они тоже кое-что и многое из ФП умеют).

moscwich
()
Ответ на: комментарий от different_thing

Ужас какой, простенько композицию 2-х функций не пытались реализовать?

Я дяденька и словей то таких не знаю;-(

З.Ы, а чем в вашем пистоне кортежи отличаются от списков?

кортежи неизменяемые

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

Да не нужен ФП в чистом виде, вообще-то. А вот списки с функциями высших порядков нужны, конечно

А вот в этом треде ты меня тоже не поддержишь?

moscwich
()
Ответ на: комментарий от different_thing

Лишний мап - это ж лишний цикл, как-никак

я уверен, что в светлооком питоне работает мэп фьюжн. Это тебе не хацкель.

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

а можно ссылку пруф, по имеющимся у меня данным сама по себе теорема Лиувилля не даёт ни каких инструментов для интрегрирования выражений.

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

Рассмешить тебя хотел.

У тебя получилось. То, что для каких то вещей есть библиотечные ф-и никак нужность/ненужность ФП не аргументирует. Поди теперь напиши тоже самое, но с возведением каждого элемента в квадрат напр.

AIv ★★★★★
()

Чтобы писать программы, не? Вы еще спросили бы, зачем нужен, например, кхмерский язык или дзонг-кэ. А еще чтобы изучать фундаментальные проблемы и вопросы информатики. Если на чем-то что-то пишут, оно не обязательно хорошее, к нему могли просто привыкнуть.

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

в этом треде

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

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

[code=python] lambda x : f(g(x)) [/code] но каким боком это к той задаче прикрутить не пойму;-(

Зачем сущности плодить?;)

В питоне есть некая специфика с изменяемыми/неизменяемыми объектами, так что там оно надо. Но на самом деле есть причина - скажем в словаре изменяемый ключ может привести к неожиданным последствиям;-)

Лишний мап - это ж лишний цикл, как-никак

Нормальные люди не используют питон для задач, где критична производительность, для таких задач есть другие ЯП.

AIv ★★★★★
()

Чисто функциональное программирование нужно хотя бы Just for lulz (Unlambda :)). Lisp - нужен, т.к. прост и удобный в некоторых случаях.

XMonad - ненужен.

Emacs - лучший в своем роде, он незаменим. Единственное пожелание: хотелось бы работающий емакс на common lisp или scheme.

Кучку поделий не развидел.

Кипы бумаги нужны, альтернатив SICP нет.

Deleted
()
Ответ на: комментарий от Minoru

Но все они используются в основном для красноглазия, а не для программирования. И это верно для любой подсекты лиспоидов.

Недавно пришлось юзать файл рассчётов написанный для MathCAD, так вот часть функционала сей программы была написанна на каком-то диалекте лиспа (узнал случайно, когда смотрел, что там программа наставила).

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

http://reference.wolfram.com/mathematica/tutorial/TheAlgorithmsOfMathematica....

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

Близко к этому http://www-sop.inria.fr/cafe/Manuel.Bronstein/pmint/index.html --- это именно то, что реализовано в SymPy. Тут я даже искать не буду, это было в их вике написано. Что касается мэпл, то там помимо подобных эвристик вроде как до некоторой степени реализован алгоритм Риша.

vvff
()
Ответ на: комментарий от different_thing

ключевое слово в моем посте «я уверен».

vvff
()

Вяловато вбросил, попробуй еще раз.

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

Ок. чтобы вот такое вот

[ map( float, l.split() ) for l in open('myfile.dat') if l.strip() and l[0]!='#' ]
написать, перед этим надо немного задуматься(чего стоит хотябы обратный порядок записи в сравнении с тем как оно в мозге логически думается), в то время как цикл пишется на автомате интуитивно и в нём можно проделать множество операций, для маппинга же нужна будет функция. Можно, конечно, лямбду пихнуть, но лучше не будем рядом ставить слова лямбда и питон :).
//При этом в плане производительности у мапа нету преимуществ перед циклом, всё одинакого тормозить будет :)).

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

да там читать особо нечего. Разве ты сам не поищешь чего подробнее по pmint. До кучи http://www.apmaths.uwo.ca/~arich/ --- тот самый интегратор, по таблицам который. Он представляет из себя пакет для математики, но сам он вроде как недоступен для широкой публики, по крайней мере третий. Возможно, можно будет найти вторую версию, но я не пробовал.

vvff
()

Бред сиво кобылы. Вопрос зачем нужна луна, когда мальборо выпускает такой табак...

TC логику потерял в яслях? Откуда у него звезда?

demmsnt
()
Ответ на: комментарий от different_thing

З.Ы, а чем в вашем пистоне кортежи отличаются от списков?

RTFM! я тут еще мат приготовил, но не буду. Ясно что с троллями так нельзя.

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