powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Функциональное программирование
25 сообщений из 300, страница 8 из 12
Функциональное программирование
    #36438234
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Январский рейтинг языков программированияРейтинг составляется на основе интеллектуального подсчета упоминаний конкретного языка программирования при поиске в Google, Google Blogs, MSN, Yahoo!, Wikipedia и YouTube. Он затрагивает только тьюринг-полные языки, не учитывая, например, SQL или HTML, а также ассемблер ввиду его специфичности.
Хм....
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438296
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan),

1. Покажем что любую частично рекурсивную функцию можно реализовать на SQL :
Базовые функции - нулевая (0), следования (n+1), выбора ({x1,...,xn}->xi) заложены в логику операторов и выражений (она в SQL точно такая же как во всех императивных языках). Достаточно очевидно чтобы останавливаться на этом.
Оператор подстановки (h(x1,x2,...,xn)=f(g1(x1,..,xn),...,gn(x1,...xn)) - реализуется при помощи Join, cоздается JOIN подзапроса вычисления f, с условия для ON соответственно {параметрI=gI(x1,...,xn), AND}
Оператор минимизации аргумента h(x1,...,xn-1)=min(y), при условии f(x1,...,xn-1,y) = 0, делается при помощи Group By, в group by идет x1,...,xn-1, в where f(x1,...,xn-1,y) = 0, а выражением будет min(y)
Оператор примитивной рекурсии h(x1,...,xn,0) = f(x1,...,xn), h(x1,...,xn,y+1) = g(x1,...,xn,y,h(x1,..,xn,y)) - собственно реализация рекурсивного CTE и делалась с оператора примитивной рекурсии, делаешь with h(x1,...,xn,y), до UNION ALL (начальный шаг) ставишь f и 0, после UNION ALL, SELECT'аешь g и y+1.

Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа.

Все тоже самое касается сравнения грамматик, но итак очевидно что в базовом императивном алгоритме количестве правил ну явно не больше SQL, который из-за своей кривоты еще больше усложнен чем мог бы быть, но все равно нормально оптимизируется
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438326
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie wrote:

> В любом случае вы почему-то считаете что SQL проще структурного кода,
> что явно не так. Грамматика первого состоит где-то из правил 5-10, а
> грамматика второго в несколько раз больше.

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

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

Слушай, ты постоянно подменяешь понятия.

Структурное программирование тоже НИКАК не связано с грамматикой
языка.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438380
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieGluk (Kazan),
...
Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа.

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

1. отвечу позже
2.1 в "алгоритме" нет правил грамматики
2.2 если имеется в виду некий абстрактный максимально примитивный язык, достаточный для выражения всех императивных конструкций и базовых типов данных, непонятно, почему мы не рассматриваем грамматику для столь же базового примитивного "SQL" (пусть даже с введенным CTE), а норовим сравнить с последним стандартом ??? двойные стандарты ? Уверяю тебя, в SQL правил будет меньше, но суть не в этом
2.3 как правильно заметил MasterZiv, сложность языка никак не связана со сложностью описывающей его грамматики. Взять хоть LISP
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438388
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Смотря что понимать под простотой. Простота понимания\задания - как правило сильно коррелировано с простотой грамматики. Человеку с улицы императивные принципы ближе чем декларативные. К примеру именно первые используются в описании бизнес-процессов. А вот простота реализации и в частности оптимизации может сильно отличаться от простоты задания. То есть в проектировании\создании архитектуры они тоже коррелированы - так называемая бритва Оккама применима именно к нему. А вот в алгоритмике ярким примером не работы этого принципа можно считать большую теорему ферма, где задача формулируется одним предложением, а решение на 30 страницах. Но собственно об этом и шел спор, что параллелятся именно декларативные языке не потому что они проще или узко-специфичны, а потому что они лучше для этого подходят...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438392
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan),

А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438402
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Это как раз вы цепляетесь к словам. Как еще можно формально описать структурное программирование (как и любое другое) как не через абстрактную грамматику языка его использующего.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438483
Фотография Пилотажный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieMasterZiv,
Wikipedia
Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний (в значении, подобном таковому в теории автоматов). Функциональное программирование не предполагает изменяемость данных (в отличие от императивного, где одной из базовых концепций является переменная) .
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции взаимодействуют и изменяют уже определённые данные. Таким образом, в императивном программировании, при вызове одной и той же функции с одинаковыми параметрами можно получить разные данные на выходе, из-за влияния на функцию внешних факторов. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат в обоих случаях, входные данные не могут измениться, выходные данные зависят только от них.


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

PS: Хотя счас конечно скажут, что википедия не аргумент, что у каждого свое определение ФП, и т.п. А когда каждый придумывает сам определения, разговаривать о чем бы то ни было бесполезно...

Сравнил а английским вариантом "определения" - переводящий похоже не в теме был.
Да и английский вариант - какая-то туфта.
Императивное программирование вроде по учебникам определяется как программирование через прямые команды компьютеру - как делать. А декларативное только заданием - что делать. То есть функция в императивном программировании - всего лишь сгруппированные команды, а функция в ФП - ближе к математической функции. Само собой контекст вычисления в ФП контролируется лучше. Об этом вроде в ангельском варианте.

И как уже отмечалось состояния есть. Собственно и КАМ (Категориальная абстрактная машина, в название языка OCAML - CAM - в честь КАМ, Haskell, SML, Moscow ML тоже с КАМ теор. связаны)
определяется на состояниях (по учебникам же). КАМ более программ. ориент. категориальная комбинАторная логика)
------------------------------------
Вопрос: насколько практически ценно создать создать виртуальную машина вроде JVM, NET, но специально под функциональные языки? Как в этом теоретически КАМ (более программ. ориент. категориальная комбинАторная логика) поможет?
Конечно КАМ в общем такая же абстракция как и машина Тьюринга, и частично-рекурсивные функции, ...
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438492
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie
1. Покажем что любую частично рекурсивную функцию можно реализовать на SQL :
Базовые функции - нулевая (0), следования (n+1), выбора ({x1,...,xn}->xi) заложены в логику операторов и выражений (она в SQL точно такая же как во всех императивных языках). Достаточно очевидно чтобы останавливаться на этом.


давай будем конкретнее
select 0 from arguments;
select x+1 from arguments;
select xi from arguments;

Имеешь в виду? Если нет, твои варианты запросов???
Если да, вопросы:

1. select всегда будет возвращать скаляр (одна столбец одной строки)?
2. как в функцию передавать аргументы? т.е. откуда их брать???
3. как быть с не однострочными запросами?

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

Nitro_Junkie
Оператор подстановки (h(x1,x2,...,xn)=f(g1(x1,..,xn),...,gn(x1,...xn)) - реализуется при помощи Join, cоздается JOIN подзапроса вычисления f, с условия для ON соответственно


Что означает "JOIN позапроса"? запросы в JOIN одноуровневые
Пример SQL-запроса, если не сложно, для f(g(x))?
Что мы будем считать оператором??? (join, union,...)?

Nitro_Junkie
Оператор минимизации аргумента h(x1,...,xn-1)=min(y), при условии f(x1,...,xn-1,y) = 0, делается при помощи Group By, в group by идет x1,...,xn-1, в where f(x1,...,xn-1,y) = 0, а выражением будет min(y)


Меня опять терзают смутные соменения. Примерчик запроса можно???
в частности интересно, что будет в where?

Nitro_Junkie
Оператор примитивной рекурсии h(x1,...,xn,0) = f(x1,...,xn), h(x1,...,xn,y+1) = g(x1,...,xn,y,h(x1,..,xn,y)) - собственно реализация рекурсивного CTE и делалась с оператора примитивной рекурсии, делаешь with h(x1,...,xn,y), до UNION ALL (начальный шаг) ставишь f и 0, после UNION ALL, SELECT'аешь g и y+1.


опять же, примерчик запроса не помешает.
понимаешь, тебе со своими мыслями разобраться проще чем окружающим. Ты можешь не договаривать что-то, считая это очевидным, при том что для окружающих это не так.
В любом случае, ты ничего не теряешь, а лишь приобретаешь ясность концепции :)
Или ты не можешь сказать как будут выглядеть все эти запросы ???

Nitro_Junkie
Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа.


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

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

А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит...

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

Я уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция. И он возвращает не один параметр - одно значение, а сразу - все возможные параметры -> значения. Соотвественно чтобы не смешивать несколько функций, говорим что в одной таблице, все ключи как колонки + и плюс еще одна колонка значение функции.

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

JOIN состоит из таблицы\подзапроса и условия связывания читаем книгу по SQL

для f(g()) - допустим

SELECT ... JOIN g1 ON ... JOIN g2 ON ... JOIN f ON f.x1=g1.value AND f.x2=g2.value ... AND f.xn = gn.value - что тебе не понятно?

Опять же для минимизации аргумента :

SELECT MIN(f.y) FROM f GROUP BY f.x1,f.x2,...,f.xn WHERE f.value=0

CTE - дольше расписывать, лень время тратить, но надеюсь идею ты понял... хотя могу расписать, если совсем тяжело
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438554
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Nitro_JunkieGluk (Kazan),

А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит...

Тогда давай и язык брать какой-то образца 90 годов Pascal например.

Бери мне не жалко... Сможешь написать виртуальную машину распараллеливающую его в общем случае?

Кстати не уверен что этого нельзя сделать, но кажется что в отличии от SQL задача NP-полная
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438564
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)передергиваешь, либо не понял о чем шел спор.
я не говорил, что декларативные языки узко-специфичны и потому лучше параллелятся, это ты выдумал

Ты говорил :
Gluk (Kazan)Там не распараллеливание, а оптимизация в полный рост.
И не за счет декларативности, а за счет узкой сцепифичности задачи

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


т.е. функцией является все-таки таблица, а не select-запрос?
что является значениями? если опять-же таблице, как передать их таблице (функции)?
Вопрос о примерах функций остается в силе.
у меня создается впечатление, что ВЫ не можете это сформулировать???

Nitro_Junkie
JOIN состоит из таблицы\подзапроса и условия связывания читаем книгу по SQL


какую книгу? У меня JOIN состоит из двух равноправных таблиц:

select * from T1, T2

где здесь подзапрос???

Nitro_Junkie
для f(g()) - допустим
SELECT ... JOIN g1 ON ... JOIN g2 ON ... JOIN f ON f.x1=g1.value AND f.x2=g2.value ... AND f.xn = gn.value - что тебе не понятно?


Будет понятнее с мааааленьким примерчиком табличек g и f (последняя вполне достаточна от одного аргумента).

Nitro_Junkie
Опять же для минимизации аргумента :
SELECT MIN(f.y) FROM f GROUP BY f.x1,f.x2,...,f.xn WHERE f.value=0


CTE пока оставим. Идею надеюсь пойму когда дашь примерчики с содержимым таблиц и запросами, выражающими операторы минимизации аргумента и подстановки.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438600
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieGluk (Kazan)Nitro_JunkieGluk (Kazan),

А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит...

Тогда давай и язык брать какой-то образца 90 годов Pascal например.

Бери мне не жалко... Сможешь написать виртуальную машину распараллеливающую его в общем случае?

Кстати не уверен что этого нельзя сделать, но кажется что в отличии от SQL задача NP-полная

ты опять стекаешь куда-то. На кой мне его параллелить? мы вроде их грамматики мерять собирались???
кстати, отнюдь не любой SQL-запрос можно распараллелить и куда более чем не любой параллелить нужно. подумай над этим.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438612
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieGluk (Kazan)передергиваешь, либо не понял о чем шел спор.
я не говорил, что декларативные языки узко-специфичны и потому лучше параллелятся, это ты выдумал

Ты говорил :
Gluk (Kazan)Там не распараллеливание, а оптимизация в полный рост.
И не за счет декларативности, а за счет узкой сцепифичности задачи

Вообще SQL один из немногих реально декларативных языков (как их определить очень удачно описал Пилотажный сверху) так что ты сам себе противоречишь

Неа. Я говорил, что SQL параллелится (в некоторых местах) за счет своей специализации, а не за счет декларативности. Поясни, как из этого вытекает, что ВСЕ декларативные языки узко-специализированы (и именно поэтому лучше параллелятся) ???
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438632
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie,

Аргументация полноты неубедительна. Join это умножение множеств, а не подстановка.
Ну и с остальными операциями маловато точности в "предъявах".

Но SQL без процедурных расширений в абсолютной трансизоляции, все таки декларативен.


Gluk (Kazan)
Сообразил ответ, почему СУБД плохо подходят как хранилище переменных для языка:
0. Слишком много посредников xDBC и ему подобные.
1. Доступ из языка очень неудобный, вызов предварительных действий для обращения к переменной, да и само обращение через процедуры с десятком параметров (


Может быть, алл знает примеры языков (желательно из области ФП и слегка современных), с родным в языке обращением в БД (постоянным хранением данных или результатов вычислений).
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438648
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarg
Сообразил ответ, почему СУБД плохо подходят как хранилище переменных для языка:
0. Слишком много посредников xDBC и ему подобные.
1. Доступ из языка очень неудобный, вызов предварительных действий для обращения к переменной, да и само обращение через процедуры с десятком параметров (


На практике это не проблема

Siemarg
Может быть, алл знает примеры языков (желательно из области ФП и слегка современных), с родным в языке обращением в БД (постоянным хранением данных или результатов вычислений).

Erlang+Mnesia очень ФП и современно
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438673
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nitro_JunkieЯ уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция.
Еще раз медленно: SQL - это язык операций рел. алгебры. Операнды операций - таблицы. Результат операций - таблица. Операции это функции.
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438754
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модNitro_JunkieЯ уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция.
Еще раз медленно: SQL - это язык операций рел. алгебры. Операнды операций - таблицы. Результат операций - таблица. Операции это функции.

ну что ты за него, пусть сам :)
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438894
RT183.2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нихера не понял :) об чем тут споры
Я распараллеливание понимаю только как сделано в Питоне, через yield
(что было содрано Питоном у языка Icon)
Т.е. ты чик-чик , из функции , назад , опять туда же, потом в другую
GOTO в чистом виде, все контексты висят где-то, ждут своего продолжения
Я вот проверил для себя факторизацию с кучей вызовов, с разными параметрами
и вы знаете тут явно есть польза
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438904
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, _мод

Повторяю для всех кто плохо читает... Рассматриваем SQL во 2 или какой там НФ. В которой у любой таблицы есть ключи и связывание всегда идет по этим ключам.

Соответственно во такой форме Join это как раз подстановка, а не умножение множеств. И вообще уже не реляционная алгебра, а "функциональная" получается.

Gluk, Join'ить можно не только таблицы но и запросы, если вы не в курсе. Пример дам с таблицами

g (сложение всех чисел до 2) f (увеличение на 1 всех чисел до 4)
k1, k2, value k1, value
1 1 2 1 2
1 2 3 2 3
2 1 3 3 4
2 2 4 4 5

Соответственно подстановка

SELECT g.k1, g.k2 FROM g JOIN f ON f.k1=g.value

получаем функцию a+b+1 для a и b <= 2

Можно расширить эти таблицы до любого счетного множества....
...
Рейтинг: 0 / 0
Функциональное программирование
    #36438918
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan),

Можно тогда определение узкой-специализированности?
...
Рейтинг: 0 / 0
25 сообщений из 300, страница 8 из 12
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Функциональное программирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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