LINUX.ORG.RU

Дай определение процедурного и функционального для начала.

habamax ★★★
()

В функциональном делается упор на иммутабельные данные и функции высшего порядка.

for (i=0; i < length(arr); i++) arr[i] *= 2

vs

map (2 *) arr
Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Мутабельность-то ты зачем приплел? Common Lisp и Scheme (особенно последняя) – функциональные языки, притом иммутабельностью там и не пахло.

Siborgium ★★★★★
()

Процедурное программирование - это когда последовательность операций можно объединить в блоки - процедуры.

Функкциональное программирование - это когда вычисления - это комбинация функций [ f(g(x), h(f(g(x))) ], и никак иначе.

anonymous
()

В функциональном подходе функция является объектом первого класса, т.е. может передаваться параметров в другие функции.

Legioner ★★★★★
()

На мой взгляд, чётких определений нет, а значит и сказать, в чём отличие, нельзя.

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

Всё он правильно приплёл, в функциональных языках изменение состояния (щяс придерутся к терминологии и скажут, что изменяемого состояния там бывает, наплевав на то, что вообще не имеется в виду доступный для изменений программистом конкретный участок памяти) описывается эффектами в явном виде, а Common Lisp и Scheme оными не являются. Из лиспов вообще только Clojure обладает сколь-либо заметными свойствами функционального языка.

Princesska ★★★★
()
Последнее исправление: Princesska (всего исправлений: 1)

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

anonymous
()

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

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

только Clojure обладает сколь-либо заметными свойствами функционального языка.

А пацаны и не знали!

доступный для изменений программистом конкретный участок памяти)

(define a 5)
(set! a 42)
Siborgium ★★★★★
()
Ответ на: комментарий от den73

Во-первых, могут быть тупо без ввода-вывода.

Во-вторых, смена состояния - понятие растяжимое. f(old) -> new меняет состояние? А print(universe_with_fewer_on_your_screen, line) -> universe_with_more_lines_on_your_screen?

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

ввод-вывод всегда меняет некое состояние

Спрячь за (какую-нибудь хрень) монаду, (хрень) монаду объяви «элементарной», и (концы в воду) пусть реализация языка разбирается, что делать с «элементарщиной». А язык - чистый и пушистый.

anonymous
()

Единственный настоящий функциональный язык который применяется это Elm. Все остальное просто закос с нарушением тех или иных принципов. Процедурные это FORTRAN, C, КОБОЛ, Бейсик и прочее легаси.

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

ты ведёшь разговор в верном направлении

Какая аксиоматика, такая и Истина.

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

Поиск пацанами даже по ссылке на Википедию утверждения о том, что Scheme – функциональный язык, продолжаются.

Кстати, а что это у тебя за код? Там что-то прикольное? А если я так же попробую?

scheme@(guile-user)> ,inspect (begin (define foo "foo") (set! foo "bar"))
#<unspecified>

Ой-вей, ничего не вернулось, ну надеюсь, хоть обращения к foo не в одно и то же место долбятся.

scheme@(guile-user)> ,inspect (begin (define foo "foo") (set! foo "bar") foo)
"bar"
Princesska ★★★★
()
Ответ на: комментарий от den73

Да, на Си с коллбеками можно писать функциональный код. Только надо ещё предусмотреть возможность передавать произвольный контекст коллбеку (обычно через void*).

Другой вопрос, что это будет довольно многословно. Поэтому, обычно, на C так не пишут.

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

Только во втором процедуры всё равно называют функциями :D

LINUX-ORG-RU ★★★★★
()

в уровне абстракции отличие

xmikex ★★★★
()

Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs https://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Перевод: Джон Бэкус. Можно ли освободить программирование от стиля фон-Неймана? Функциональный стиль и соответствующая алгебра программ http://rkka21.ru/docs/turing-award/jb1977r.pdf

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

Джон Бэкус. Можно ли освободить программирование от стиля фон-Неймана?

Говновопрос (для нежных и ранимых - неактуально).

Должно быть:

  1. можно ли писать не в стиле фон-Неймана с не меньшей скоростью выполнения кода? (я помню, что в наше время скорость работы программы - ничто, скорость работы софтописательской конторы - всё, но всё-же хотелось бы «более оптимального» выходного кода);

  2. можно ли писать не в стиле фон-Неймана с аналогичной «близостью к железу»?

yyk ★★★★★
()

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

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

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

Хаскелю это скажи. Окамл рядом посмеется.

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

с не меньшей скоростью выполнения кода

Супекомпиляция. Примус. Признание Америки.

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

можно ли писать не в стиле фон-Неймана с аналогичной «близостью к железу»

Такие вопросы задаете, неудобно отвечать даже.

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

Супекомпиляция

Ррррррррр, б%%.

Метакомпиляция, частичные вычисления, WPO как угодно назови. Раскрываем все скобки и надеемя на лучшее.

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

Так ЛИСП сам не может определиться - ему к умным, или к красивым? Намекает: я, конечно, умный, но ещё более я красивый.

Вот его все время в функциональные и записывают.

anonymous
()

процедурного программирования от функционального?

В том что процедуры не возвращают значения, а функции возвращают. Ваш К.О.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

Вот его все время в функциональные и записывают

ЛИСП божественный язык, поэтому ЛИСП есть всё. Сказать что ЛИСП функциональный — всё равно что сказать, что бог это пузатый мужик с бородой. (Т.е. оскорбительная пошлость и богохульство).

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от Int0l

Здрасте. Приплыли. Хаскель, (Standard) ML, Idris, OCaml, Scala, F#, F* у нас теперь процедурные языки.

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

Siborgium ★★★★★
()
Ответ на: комментарий от yyk
  1. можно ли писать не в стиле фон-Неймана …

на железе, которое уже давно не фон-Неймана?

Нужно ли писать в стиле фон-Неймана на распределенных гомогенных системах, на гетерогенных системах? Умеем ли, вообще? А сколько платят? А ФРС баксы печатает на фон-Неймане?

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

на железе, которое уже давно не фон-Неймана?

И? Наличие библиотек и «паттернов» сделали бородатый си супер-пупер языком «не фон-Неймовского» типа? Или вы про что?

yyk ★★★★★
()

Программа как последовательность утверждений, объединенных в подпрограммы (с ограничением на прямую передачу управления) vs программа как композиция функций (с ограничением на присваивание значений именам).

Nervous ★★★★★
()

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

Люди используют те или иные подходы тогда, когда им они нужны. Тот же С едва ли можно назвать чисто процедурным, потому что при некотором желании вытворять там можно всё что угодно.

А реальность она не от этой теоретической дичи, она от того, как работают компьютеры. И вот там этой дичи нет. Есть инструкции, есть работа с памятью и всё. Все языки так или иначе прежде всего ЯП в смысле программирования компьютера, а не в смысле теории засидевшегося на стуле и сошедшего с ума математика.

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

Или вы про что?

Сперва сам озвуч про что ты(вы) сам(и)? Переиначил(и) вопрос из книжки, не изучив даже её содержание?

А я про то, что современный IT-ширпотреб занимается исключительно тем, что подгоняет всё под одну гребенку - фон-Нейман, сам при этом почти везде не фон-Нейман. Любой изврат за ваши деньги.

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

В функциональном подходе функция является объектом первого класса, т.е. может передаваться параметров в другие функции.

Плохой критерий. Ведь тогда Си тоже функциональный, я могу указатель на функции передавать в функции, как в qsort()

SZT ★★★★★
()

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

В функциональном программировании ты описываешь что такое нужный результат.

Процедурный подход оставляет меньше свободы выбора для компилятора, так как прописано больше деталей. Функциональный подход позволяет реализовать более высокий уровень оптимизации и композиции.

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

А я про то, что современный IT-ширпотреб…

Не интересует. Интересует возможность писать «числодробилки и ОС-и» (условно) не «на си с фортраном», а на чём-то «не фон-Неймановском» без потерь скорости вычислений.

Вопрос был попыткой узнать что-то новое (если оно есть) без глубокого погружения в тему :) Но скорее всего - риторический ))

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

Ведь тогда Си тоже функциональный

Мультипарадигменный? ))

«Чисто функциональный» язык упёрся только полным маргиналам, для которых даже монады - презренная императивщина )

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

Мутабельность-то ты зачем приплел?

Затем, что это — достаточно характерная черта функционального подхода.

Common Lisp и Scheme (особенно последняя) – функциональные языки

Они — мультипарадигменные. Их «функциональность» сильно преувеличена.

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

на чём-то «не фон-Неймановском» без потерь скорости вычислений.

Как раз скорость вычислений обеспечивается за счет «не фон-Неймановости».

«Историческая справка» (с) Риддик.

Фон-Нейман тормоз по опредлению, так как поэлементно перекачивает данные из/в памяти через центральный процессор.

Я бы посморел на твою «числодробильную ОС», которая, например, пословно читала/писала бы данные из/в гигабитной сети.

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

в функциональном динамическая типизация

Бред сивой кобылы.

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