LINUX.ORG.RU
ФорумTalks

ФЯП


0

0

Расскажите про ФЯП, в частности о Haskell. Неужели это такое уж марсианское поделие, на котором не пишешь, а разговариваешь? В чем конкретно фишка? Wikipedia не дала мне полного просветления, очень хотел бы комментариев очевидцев.

P.S. И есть ли у этой байды перспективы?

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

Не тру, у фяп читабельность больше. Покури onLisp.

"The aims of functional programming may show more clearly when
contrasted with those of the more common approach, imperative
rogramming.

A functional program tells you what it wants; an imperative program
tells you what to do. A functional program says “Return a list of a and
the square of the first element of x:”
(defun fun (x)
(list ’a (expt (car x) 2)))

An imperative programs says “Get the first element of x, then square it,
then return a list of a and the square:”
(defun imp (x)
(let (y sqr)
(setq y (car x))
(setq sqr (expt y 2))
(list ’a sqr)))"

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

> Не тру, у фяп читабельность больше.

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

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

читабельность - синоним выразительности, тоесть показатель простоты восприятия смысла написанного кода, анонимус, на пост которого я отвечал, писал, что серьезная реализация quicksort будет не сильно выразительней c++, к этому и вопрос мой был

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

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

> Здравствуй дерево!

Папа? Карло? Неужели это ты?!?

> Сказать-то есть чего по теме, или как обычно - взбзнул и в кусты?

А что не по теме то? Попробуй написать настоящую быструю сортировку читабельно. На любом языке. Независимо от языка какашка получится.

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

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

Не всегда, но часто.

Суровая оптимизация сложных алгоритмов по скорости и памятежору - не та область, где ФП рулит. Но зато тут рулит метапрограммирование на макросах.

Вообще есть много задач, где ФП не рулит: логическое программирование, программирование автоматов, агентное программирование, параллельное программирование.

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

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

> надо иметь возможность пользоваться разными парадигмами одновременно, и иметь возможность формулировать новые, пока еще не придуманные парадигмы и отражающие их языки

Классно ты Lisp описываешь, я аж облизнулся :)

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

> Вообще есть много задач, где ФП не рулит: логическое программирование, программирование автоматов, агентное программирование, параллельное программирование.

Почему ФП не рулит для параллельного программирования ?

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

> Почему ФП не рулит для параллельного программирования ?

Потому что лямбда-исчисление является частным случаем пи-исчисления, но никак не наоборот.

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

Вообще-то реализация пролога в лиспе занимает афаик 140 строчек c коментариями. Так что опять анонимус безрезультатно взбзнул.

Программирование автоматов - назови хоть 1 причину почему "не рулит". Ато опять что-то завоняло. По большому счету программа на функциональном языке куда ближе к конечному автомату, чем императивное угребище.

Агенты - с какого банана тут-то не рулит? И чего в них такого мистического, ась? Давай расскажи, просвяти темноту пока я не выбрал лисп для своего агентного workflow.

Параллельное программирование. Таже песня. MPI для кого придумали?

В сухом остатке от поста - H2S.

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

> Вообще-то реализация пролога в лиспе занимает афаик 140 строчек c коментариями.

Интерпретатор не считается. Не интересно. Так и на машине Тьюринга можно что угодно изобразить. А если компилировать Пролог эффективно, то чисто функциональное подмножество Лиспа не может быть целевым языком. Не годится тут чисто функциональная модель, даже ленивая в Хаскелле, и та не годится.

> Программирование автоматов - назови хоть 1 причину почему "не рулит".

Эффективность. Автомат имеет состояние. Если его завернуть в монаду, то теряется сильно производительность.

> Агенты - с какого банана тут-то не рулит? И чего в них такого мистического, ась?

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

> Давай расскажи, просвяти темноту пока я не выбрал лисп для своего агентного workflow.

Я тоже Лисп использую для агентного программирования. Но ведь он не чисто функциональный.

> Параллельное программирование. Таже песня. MPI для кого придумали?

Что в MPI функционального?

Заданее на дом: придумать чисто функциональную модель обмена сообщениями (в работы Р. Милнера не подглядывать!). Показать, как сложность модели зависит от числа элементов в ней. Попытаться изобразить в рамках модели классическую задачу "обедающих философов".

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

P.S. По поводу пролога: советую сравнить чисто функциональную унификацию (например, как она реализована в том прологе, который идет с Hugs), и разрушающую унификацию в машине Уоррена (например, gprolog).

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

> придумать чисто функциональную модель обмена сообщениями (в работы Р. Милнера не подглядывать!).

Для не осиливших самостоятельно глупых школьников ссылку на почитать можно? Google не помог.

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

>Нет конечно же. Совсем не функциональный. У каждого потока там есть состояние.

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

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