Здравствуйте, Lazy Cjow Rhrr, Вы писали:
VD>>Прости, ты в курсе, что в С и Паскале есть поддержка ФВП?
LCR>Это указатели на функции что-ли?
Угу. Кстати если мне не изменяет мой склероз в каком-то Паскале (TP? BP ? )были типизированные указатели на функции.(Или это уже в делфи появилось... )
В общем Sort() с передачей метода принимающего 2 значения типа обжект и возвращающего -1,0,1 в зависимотси от результата сравнения имел место быть.
Здравствуйте, Cyberax, Вы писали:
C>ФП невозможен без какой-либо формы ФВП.
ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть функциональными.
Здравствуйте, Cyberax, Вы писали:
C>Лямбды — это действительно просто сахар, хотя такой же необходимый для C>ФП, как и циклы for/while для ИП, которые являются сахаром над if/goto.
Вообщето, это именованная функция сахар для лямбды, а не наоборот. По крайней мере в Haskell именно так, если мне память не изменяет. Но это не принципиальная претензия — с остальным я, в принципе, согласен.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, GlebZ, Вы писали:
GZ>Я бы не сказал что он поддерживает функциональный стиль. Он поддерживает функциональные фичи.
+1. Собственно, несмотря на фразу самого автора про “language that supports a functional style of programming”,
из всех дальнейших оговорок про "There are currently no plans" и "are not entirely like" это неявно и вытекает.
GZ>Хотя бы корневую рекурсию (используемый стек то ограничен). А этого здесь нет.
Может "хвостовую" (tail)? Или я чего-то не знаю? Поддержка хвостовой рекурсии то есть (см. например здесь
Здравствуйте, Klapaucius, Вы писали:
K>Вообщето, это именованная функция сахар для лямбды, а не наоборот. По крайней мере в Haskell именно так, если мне память не изменяет. Но это не принципиальная претензия — с остальным я, в принципе, согласен.
Хотя нет, не совсем. Главное это не ФВП, а функции, являющиеся FCO — тут есть нюанс — это не одно и то же.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, Трурль, Вы писали:
C>>ФП невозможен без какой-либо формы ФВП. Т>ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть функциональными.
Извиниття ! Куда это high order функции из ерланга проелись ?
Вот живой пример :
Fun3=fun(Fun1,Fun2)-> Fun1() + Fun2() end.
Это кусочек парсера скриптового языка. Делает из 2-х подвыражений лямбду, которая их складывает.
На входе — функции.
На выходе — тоже функция. Стало быть, high order functions из Erlang никто не утащил, воспользовавшись ночным мраком и плохой погодой...
Трурль wrote: > C>*ФП невозможен без какой-либо формы ФВП*. > ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть > функциональными.
В Lisp'е нет ФВП??? А как же code is data is code и замыкания?
Про Sisal ничего не знаю, в Erlang'е ФВП есть (см. функции map или foreach).
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Cyberax, Вы писали:
C>>ФП невозможен без какой-либо формы ФВП. Т>ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть функциональными.
Лиспа не знаю, но в Scheme точно есть
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Cyberax, Вы писали:
C>>Ну да, С как и Perl может быть WOP-языком (Whatever Oriented Programming).
VD>Не может. Мордой лица не вышел.
Mirrorer,
LCR>>Это указатели на функции что-ли?
M>Угу. Кстати если мне не изменяет мой склероз в каком-то Паскале (TP? BP ? )были типизированные указатели на функции.(Или это уже в делфи появилось... ) M>В общем Sort() с передачей метода принимающего 2 значения типа обжект и возвращающего -1,0,1 в зависимотси от результата сравнения имел место быть.
Согласен, имел.
M>Согласно википедии этого достаточно M>
In mathematics and computer science, higher-order functions or functionals are functions which do at least one of the following:
M> * take one or more functions as an input
M> * output a function
Однако не слишком строгое определение, заметь. То есть это определение можно трактовать очень вольно. Как то что этим свойством обладают все функции (в математическом смысле), так и то, что этим свойством могут обладать некоторые функции.
Две большие разницы. Например, верни мне указатель на
1. функцию Medved(_, 22, _) получающуюся после частичного применения числа 22 к среднему аргументу функции Medved(x, y, z).
2. функцию f, которая является частной производной функции Medved(x, y, z) по второму аргументу y.
Короче, у нас путаница возникла из-за слияния двух альтернатив:
1. Если мы поставим тождество между указателями на функции и просто функцииями. Отсюда следует неравенство наличия ФВП и наличия функций как первоклассных объектов, всё так, как говорит Влад в этом сообщении
2. Если же функции и указатели на функции разделять, то указанное выше вики-определение подразумевает наличие функий как первоклассных объектов. Следовательно наличие ФВП равносильно наличию функций как первоклассных объектов.
Так что здесь флуктуации чисто терминологические: называть ли функцию, принимающую указатель на другую функцию, ФВП или нет.
Я предпочитаю второй вариант, но дискутировать на эту тему мне бы не хотелось бы по понятным причинам.
Здравствуйте, gandalfgrey, Вы писали:
Т>>ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть функциональными. G>Извиниття ! Куда это high order функции из ерланга проелись ?
Кажется, у некоторых проблемы с восприятием грамматической категории времени глагола.
Естественным был бы вопрос: "откуда они взялись?".
Hello, Cyberax!
You wrote on Wed, 31 Jan 2007 22:24:10 GMT:
>> Повторяю — функциональное программирование является >> разновидностью процедурного, нравится вам это или нет. C> Да даже близко не является. Процедурное программирование — это C> подмножество императивного стиля.
C> Функциональное программирование — это совершенно другой стиль. C> Ортональный ООП и противоположный императивному.
Думаю, вы не сможете договориться даже насчет определения функционального и процедурного программирования, не говоря уже о чем-то большем.
gandalfgrey,
C>>>ФП невозможен без какой-либо формы ФВП. Т>>ФВП нет в Sisal. Не было их в Лиспе и в Эрланге, что не мешало им быть функциональными. G>Извиниття ! Куда это high order функции из ерланга проелись ? G>На входе — функции. G>На выходе — тоже функция. Стало быть, high order functions из Erlang никто не утащил, воспользовавшись ночным мраком и плохой погодой...
Всё совершенно верно, но лямбды в Эрланге появились не сразу. В OTP R5 и раньше они представлялись просто туплами. Кстати это и ответ на вопрос, почему gen_server:start_link принимают имя модуля, а не список функций-хэндлеров. Казалось бы самое непосредственное и напрашивающееся решение. Исторически так сложилось.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>То есть это определение можно трактовать очень вольно. Как то что этим свойством обладают все функции (в математическом смысле), так и то, что этим свойством могут обладать некоторые функции.
+1
LCR>Например, верни мне указатель на LCR>1. функцию Medved(_, 22, _) получающуюся после частичного применения числа 22 к среднему аргументу функции Medved(x, y, z).
Мммммм.. Тут какой интресный вопрос возникает.. Считать ли partial application необходимым условием для ФВП?
LCR>2. функцию f, которая является частной производной функции Medved(x, y, z) по второму аргументу y.
Хотел бы я увидеть частную производную от Medved("preved","mishko","kosalapiy")
А если серьезно, то это вопрос наличия опять же partial application и\или лямбд. Хотя имея лямбды можно организовать partial application.. Получается что наличие лямбд достаточное условие для поддержки языком ФВП ?
LCR>Так что здесь флуктуации чисто терминологические: называть ли функцию, принимающую указатель на другую функцию, ФВП или нет.
+1 Но обычно в таком случае ломается больше всего копий. Как-то Объектный язык vs Объектно-ориентированный Ну или в новой интерпретации Функциональный или Функционально-ориентированный.
LCR> но дискутировать на эту тему мне бы не хотелось бы по понятным причинам.
+1. На вкус и цвет товарищи разные.
... << RSDN@Home 1.2.0 Pink Floyd — Don't Leave Me Now >>
Здравствуйте, Трурль, Вы писали:
Т> Кажется, у некоторых проблемы с восприятием грамматической категории времени глагола. Т>Естественным был бы вопрос: "откуда они взялись?".
Я не понимаю, что такое время, и признаю это открыто. Для меня это совершенно абстрактное понятие, никак не соотносящееся ни с реалиями жизни, ни с физическими феноменами...
Впрочем, я подразумевал именно массированную пропажу ФВП из различных языков и реализаций, поскольку очевидно, что у большинства из них в зародышево-личиночной стадии развития их не было. Ни у ерланга, ни у МЛя... Не знаю, как было дело с лиспом.
Здравствуйте, Cyberax, Вы писали:
C>LaPerouse wrote: >> Повторяю — функциональное программирование является разновидностью >> процедурного, нравится вам это или нет. C>Да даже близко не является. Процедурное программирование — это C>подмножество императивного стиля.
C>Функциональное программирование — это совершенно другой стиль. C>Ортональный ООП и противоположный императивному.
Видите ли, те языки, о которых вы говорите (C++, Pascal) в представлении многих являются классическими процедурными языками, что нет ничего недопустимого в усилении этого термина, которое более предпочтительно по сравнению с введением нового термина – “функциональный язык”. Исходя из того, что сказано мной выше, едва ли справедливо выделять из процедурных группу функциональных языков, тут, скорее, нужно говорить о “функциональном подходе” и о языках, наиболее эффективно поддерживающих этот подход.
Все-таки основным критерием функционального подхода является то, о чем я говорил выше – отношение к хранению состояния. Вот он, постамент, на котором зиждется вся теория и практика функционального программирования, тот самый “пятый элемент”, придающий особый колорит этому стилю. Стоит только разрешить изменение переменных в любом “функциональном языке” и внешние ссылки на эти переменные (которое не нужно даже специальным образом вводить), и этот язык неуловимо для глаз превратится в стандартный процедурный язык. Все остальное – синтаксические конструкции, помогающие объявлять вложенные конструкции функций, встроенные в сам язык возможности для обработки списков и т п — все это для дураков, чтобы дать им почувствовать всю “революционность” и крутизну “новейшего” подхода. Да! Я утверждаю, что за роскошной вывеской прячется тухлятина, которой уже как минимум 50 лет. И готов это доказать любому, пусть и придется пожертвовать частью личного времени на восполнение пробелов в чужом образовании.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Mirrorer,
LCR>>Например, верни мне указатель на LCR>>1. функцию Medved(_, 22, _) получающуюся после частичного применения числа 22 к среднему аргументу функции Medved(x, y, z). M>Мммммм.. Тут какой интресный вопрос возникает.. Считать ли partial application необходимым условием для ФВП?
M>А если серьезно, то это вопрос наличия опять же partial application и\или лямбд. Хотя имея лямбды можно организовать partial application.. Получается что наличие лямбд достаточное условие для поддержки языком ФВП ?
Ну нужно ещё уметь передавать лямбды в качестве параметров и возвращать их. (Это равносильно требованию иметь лямбды как первоклассные значения).
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
M>> Получается что наличие лямбд достаточное условие для поддержки языком ФВП ?
LCR>Ну нужно ещё уметь передавать лямбды в качестве параметров и возвращать их. (Это равносильно требованию иметь лямбды как первоклассные значения).
После некоторого размышления +1(Почему-то не смог сразу представить как это — иметь лямбды и не иметь возможности их возвращать). В следующий раз буду более подробно уточнять, что я имею ввиду.
... << RSDN@Home 1.2.0 Queen — I Want To Break Free >>