powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Функциональное программирование
25 сообщений из 300, страница 5 из 12
Функциональное программирование
    #36432942
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезМожет я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций:
Код: plaintext
1.
dest_list = scr_list.foreach(item => process_item(item));
Если process_item() - "чистая" функция, то "умный" компилятор запросто может применить реализацию foreach, запускающую process_item в несколько потоков.

Согласен. Но это малый пласт задач, которые можно параллелить. Яркий пример - интегрирование Симпсоном сложных функций. Этот процесс можно разбить на 2-4 потока и получить некоторое ускорение вычислений за счёт особенностей самого метода. Он - параллелится. Но как быть с другими алгоритмами? Поиски в графах e.t.c ?
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433060
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) wrote:

> Давай отделять мух от котлет ? Как вот это можно свернуть в константу:
>
> (define (run f f1 f2 x y)
> (f (f1 x) (f2 y))
> )

Я имел в виду, что накладные расходы сведутся к константе.
Я схему не знаю, поэтому не могу сказать, будет ли здесь ОХР.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433081
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie wrote:
> насколько они высокоуровневые. Так грубо говоря в SQL механизм SELECT'ов
> - чисто функциональный язык, а INSERT, UPDATE, DELETE - его императивная
> составляющая.

Это фигня какая-то. В SQL (без процедурных расширений) все операторы
декларативны, в том числе и
INSERT, UPDATE, DELETE.
То, что они меняют данные, не делает их императивными.

Соответственно SQL представляет из себя максимально
> функциональное (декларативное) программирование из всех существующих на
> данный момент. За ним условно следует Haskell, затем Lisp, затем все
> остальные. Это из общеизвестных ессно.

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

> Поэтому говорить о будущем функционального программирования некорректно.
> Оно уже наступило, про популярность SQL можно судить по названию этого
> форума. Правильнее говорить о его развитии...

SQL- не функциональный язык. Не путай декларативные языки и функциональные.

И кстати не надо путать чисто функциональные и гибридные языки типа лиспа,
схемы, питона и т.п.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433085
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton wrote:

> Я как раз про это и спрашиваю сообщество. Где эти самые критерии?

Это уже вопрос конкретного языка и конкретного компилятора с него.
"В вакууме" это обсуждать бессмысленно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433139
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton wrote:

> Я опять не понимаю (книга на полке стоит) - можешь дать точную ссылку с
> цитатой?
> Пруфлинк с цитатой. <http://roman-dushkin.narod.ru/fp_01.html>

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

Язык обозвал LISP-ом, CLOS обозвал диалектом, почему-то у него
лисп -- традиционный интерпретатор.

А как вообще книга ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433156
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Gluk (Kazan) wrote:

> Давай отделять мух от котлет ? Как вот это можно свернуть в константу:
>
> (define (run f f1 f2 x y)
> (f (f1 x) (f2 y))
> )

Я имел в виду, что накладные расходы сведутся к константе.
Я схему не знаю, поэтому не могу сказать, будет ли здесь ОХР.



Накладные расходы на многопоточность ? к константе ???
с учетом необходимости синхронизации f1 и f2 перед выполнением f ?????
Это фантастика (с)
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Однако, Душкин обескураживает и разочаровывает с первых строк
своими высказываниями о лиспе. Блин, если не знаешь, ну зачем писать ?

Язык обозвал LISP-ом, CLOS обозвал диалектом, почему-то у него
лисп -- традиционный интерпретатор.

А как вообще книга ?

Пока не могу сказать. Других книг в бумажном варианте по ФП я не читал ибо на русскоязычной ниве больше ничего не издаётся. С первых строк, захватывает люто и бешено, но от некоторых глав у меня честно говоря плавится мозг и вынужнен откладывать книгу на полку а потом перечитывать главу заново. Душкин также жонглирует неведомой мне терминологией из комбинаторики, e.t.c. и читать местами трудно.

Вообще-то я искал более практическое руководство. Но на ozon-e есть новое издание. Что-то вроде "Практика работы на языке Haskell". Думаю для меня это будет более подходящим quick start-ом.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433765
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

В данном случае я рассматриваю язык SQL с точки зрения того, что INSERT, UPDATE, DELETE - задают условия задачи - выполняются друг за другом в определенные моменты во времени - изменяет текущее состояние системы - императивны, SELECT - вычисляет функцию - иррелевантны ко времени - обладают атрибутами чистой функции - декларативны... Конечно я знаю что в INSERT, UPDATE, DELETE можно использовать семантику SELECT, но для чистоты терминологии мы их расматриваем опять таки раздельно как вычисление функций, и в зависимости от результатов изменение системы...

То что LISP - не функциональный язык я в курсе... И SQL не чисто функциональный... Потому как чисто функционального языка быть не может, я же писал... Вопрос в степени функциональности и именно в порядке убывания ее я расставил "языки" в предыдущем посте...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433990
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) wrote:

> Накладные расходы на многопоточность ? к константе ???
> с учетом необходимости синхронизации f1 и f2 перед выполнением f ?????

На вызов, какая там многопоточность ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36433998
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie wrote:
> То что LISP - не функциональный язык я в курсе... И SQL не чисто
> функциональный...

SQL вообще нигде ни разу не функциональный.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434045
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
На вызов, какая там многопоточность ?


А кто сказал, что накладные расходы ограничиваются вызовом ? А кванты времени распределить, а потоки синхронизировать ???
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434088
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin
Код: plaintext
1.
2.
3.
4.
5.
6.
parfib :: Int -> Int
parfib  0  =  1 
parfib  1  =  1 
parfib n = nf2 `par` (nf1 `par` (nf1+nf2+ 1 ))
           where nf1 = parfib (n- 1 )
                 nf2 = parfib (n- 2 )


Кстати, я правильно понимаю, что здесь 3 потока ?

1. Вычисляет nf1
2. Вычисляет nf2
3. Складывает результаты

Если да, то во первых вопрос: Как обеспечивается синхронизация ? Каким образом 3 поток ожидает первых двух ??? Ну и п.2 Запускаем ЭТО для 1000000 и получаем аффигенную кучу потоков ожидающих вычисления nf1 и nf2 (про то что мы дофигища раз будем вычислять одно и то-же скорбно промолчу) и парочку совсем мелких (ради которых не стоило потоки создавать). Шедулер должен быть очень умный, чтобы раздать кванты в правильном порядке (если система не загнется раньше на таком количестве честных потоков). Как пример параллельного программирования конечно катит :) чисто поржать

Все это к вопросу о накладных расходах на вызов
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434098
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Все это к вопросу о накладных расходах на вызов

И накладные расходы на этот бордель будут отнюдь не константой от мульона
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434108
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Wikipedia
Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний (в значении, подобном таковому в теории автоматов). Функциональное программирование не предполагает изменяемость данных (в отличие от императивного, где одной из базовых концепций является переменная).
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции взаимодействуют и изменяют уже определённые данные. Таким образом, в императивном программировании, при вызове одной и той же функции с одинаковыми параметрами можно получить разные данные на выходе, из-за влияния на функцию внешних факторов. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат в обоих случаях, входные данные не могут измениться, выходные данные зависят только от них.


Первые 2 абзаца в википедии про функциональное программирование... Таким образом SQL более удовлетворяет определению функционального программирования чем тот же Haskell или тем более Lisp...

PS: Хотя счас конечно скажут, что википедия не аргумент, что у каждого свое определение ФП, и т.п. А когда каждый придумывает сам определения, разговаривать о чем бы то ни было бесполезно...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434241
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieТаким образом SQL более удовлетворяет определению функционального программирования чем тот же Haskell или тем более Lisp...
SQL - это всего-лишь протокол взаимодействия РСУБД и клиента. И наделять его какими-то особыми свер-естественными возможностями не стоит. Это вобщем-то даже не язык. Кроме того у SQL существует несколько стандартов, и несколько реализаций со своими особенностями. Еть также под-разделы SQL: DQL, DML, DDL , рассматривая которые мы неизбежно скатимся в глубокую софистику терминов, понятий и толкований. Есть также масса трюков и уловок, которые могут быть реализованы в одной СУБД для преодоления некоторых ограничений SQL, и полностью отсутствовать в другой. И уж тем более неинтересно рассматривать концептуальные Ansi* SQL. Их практическая польза - под вопросом.

Поэтому я предлагаю SQL вообще исключить из темы дискуссии. Это неинтересно и оффтопово.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434280
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

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

Предлагаю их тоже исключить из дискуссии и посмотрим что останется...

ЗЫ: Попробуйте рассмотреть СУБД как очень высокоуровневую виртуальную машину типа JVM и все станет на свои места...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434299
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkiе, я не хочу спорить, но представь себе на минуту, что мы зададимся целью доказать что протокол http является языком ФП ?

Разничу чувствуешь?
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434343
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Вы имеете в виду HTML и XML? Это не языки вычислений, поэтому сравнивать их с SQL, Haskell, и т.п. не корректно. А вот скажем XSLT как язык преобразований вполне можно... Другой вопрос конечно применимости, на SQL симплекс-метод реализовать можно, но запрос будет диким, с другой стороны в business solutions SQL более применим чем императивные языки.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434367
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieЭто не языки вычислений, поэтому сравнивать их с SQL, Haskell, и т.п. не корректно. А вот скажем XSLT как язык преобразований вполне можно...
1) Ты почти сам ответил на свой вопрос. SQL-это прослойка. Это не язык программирования в общем понимании этого слова.

2) XSLT не является подмножеством/частью http. Это отдельная технология.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434395
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Java - тогда тоже прослойка между клиентом и виртуальной машиной. Не ставьте телегу впереди лошади... Первичен всегда язык\парадигма, а то что его выполняет JVM, процессор, СУБД это уже технические особенности.

ЗЫ: Хм... Интересно что означает последняя буковка в слове SQL... Уже начал сомневаться
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434439
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хочу спорить. Можешь оставаться при своём мнении.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434443
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
SQL вообще нигде ни разу не функциональный.

Как посмотреть. SQL - это алфа Кодда, а алфа - это набор операций рел. алгебры. А операции - это функции. Т.е. и insert? update? delete - это функции
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434461
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Так спорить не о чем... Как я уже писал, вопрос определений... Если у тебя черное это белое, то доказать обратное невозможно :)
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434747
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дискуссия имхо как-то выдохлась. Хочу только ответить на два контраргумента предъявленных мне и дас вере аллес.

Первое:

Может я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций:


dest_list = scr_list.foreach(item => process_item(item));


Если process_item() - "чистая" функция, то "умный" компилятор запросто может применить реализацию foreach, запускающую process_item в несколько потоков.

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

Второе:

Компилятор С/С++ не имеет право параллелить твой код. И не знает, где
это можно сделать. А в функциональных языках -- наоборот, и знает,
и имеет право.

Слушай Зифф, ну ладно тут дети всякую хрень пишут, но ты же солидный человек, модератор форума C/C++, это ж твой кусок хлеба! Зачем же ты всем компиляторам C/C++ так походя отказываешь в способности автоматически параллелить код? Зайди на сайт Сана, посмотри чего делает свич -xautopar Сановского C/C++ компилятора и да снизойдёт на тебя просветление.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36434799
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дискуссия как раз очень интересная, ибо развенчивает некоторые мифы.
Антарес задал мне интересный вопрос, чуть позже напишу ответ и постараюсь задать вопросы для продолжения дискуссии.
Промежуточный итог (на мой взгляд)
Пока ясно, что ФП <> декларативное программирование. А многие ждут именно декларативной революции.
Современные реализации ФП-языков так-же как и древние SQL сервера мало чего умеют сами, а то что умеют непонятно по каким критериям работает. Спор за автоматическое распараллеливание в ФЯ это выявил.
...
Рейтинг: 0 / 0
25 сообщений из 300, страница 5 из 12
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Функциональное программирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]