Re[7]: Немного о функциональном подходе
От: Mirrorer  
Дата: 11.05.07 07:25
Оценка: :))) :))
Здравствуйте, deniok, Вы писали:

D> и ещё пяток (главный вопрос каких?). И с песнями вперёд.


Генетики утверждают что достаточно четырех общеизвестных C, A, G, T
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Немного о функциональном подходе
От: Кодт Россия  
Дата: 10.05.07 15:08
Оценка: 1 (1) +2
Здравствуйте, sharcUs, Вы писали:

К>>Было бы здорово, если бы ты смог одной-двумя фразами выразить фундаментальную мысль статьи?


Э... То, что ты сейчас сказал — это либретто: сжатие с потерями, так сказать (или без потерь).
А интересно, что из всего этого ты открыл для себя, в чём субъективная новизна и глубина. В чём, может быть, личный интерес и блеск в глазах?
Если это удастся выразить, то статья перестанет выглядеть компиляцией. (Ну ты понял мою основную претензию, да?)

U>Для ФП характерна математическая семантика выражений, абстрактность по отношению к ВТ,

U>выводимость типов выражений,
Выводимость типов не есть принадлежность ФП. Просто в императивных языках традиционно используются вещи, ломающие систему вывода типа Хиндли-Милнера: перегрузка операторов (арифметика, присваивание) и неявное приведение (опять же арифметика, классы). Но пример того же Nemerle или OCaML показывает, что можно сохранить и императивность, и ХМ-типизацию в одном флаконе.
А с другой стороны, существуют и ИЯ, и ФЯ с утиной типизацией.
Особенно забавен в этом плане С++, у которого статическая типизация конкретных типов (где правит бал императивность) и утиная — шаблонов (декларативность).

U>Это основные мысли описанные с статье. Не знаю как должна выглядеть систематизация, но я этот термин использую именно для подобных целей

Для чего бы ты воспользовался систематизацией, помимо написания статьи? Ну например, для выбора языка под решение конкретной задачи, или для написания нового языка, закрывающего белые пятна в мире существующих языков, и т.п.?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[8]: Немного о функциональном подходе
От: Кодт Россия  
Дата: 10.05.07 17:52
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Кто сказал все? Попробуй сделать что нибудь с конструкцией, скажем, class.


Поэтому забиваем на C# и берём Smalltalk... Ну а когда в руке смолоток, то всё вокруг кажется гвоздями, пардон, объектами
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[8]: Немного о функциональном подходе
От: deniok Россия  
Дата: 13.05.07 16:38
Оценка: :)))
Здравствуйте, Mirrorer, Вы писали:

M>Генетики утверждают что достаточно четырех общеизвестных C, A, G, T


Этак выйдет не функциональный язычок, а жалкий человечишка
Re[9]: Немного о функциональном подходе
От: Кодт Россия  
Дата: 16.05.07 14:14
Оценка: :)))
Здравствуйте, deniok, Вы писали:

M>>Генетики утверждают что достаточно четырех общеизвестных C, A, G, T

D>Этак выйдет не функциональный язычок, а жалкий человечишка
... который придумает функциональный язычок.

Теория суперкомпиляции прямо-таки.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 07:37
Оценка: 7 (2)
Здравствуйте, Didro, Вы писали:

Ну статья не настолько формализирована
Но раз всплыло — надо топить.

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

Функциональное программирование для всех
Автор(ы): Вячеслав Ахмечет
Дата: 16.09.2006
Данная статья достаточно кратко и вполне доступно, используя примеры на Java (!), знакомит читателя с базовыми понятиями функционального программирования.
(обзорная статья о ФП)
Введение в теорию программирования. Функциональный подход (курс ФП, использующий SML)
Основы функционального программирования (курс ФП, использующий LISP)
Основы функционального программирования (действиельно основы
Лекции по функциональному программированию (вроде на основании этих курсов вышла недавно книжка по хаскелю, первая рускоязычная в своем роде)
Декларативное программирование (обзорная статья о ДП и его составляющих: функциоанльном и логическом программировании)
Сильные стороны функционального программирования (перевод опуса Джона Хьюза о ФП)
Описание языка Haskell (русскоязычное описание Haskell)
Мягкое введение в Haskell. Часть 1
Автор(ы): Пол Хьюдак, Джон Петерсон, Джозеф Фасел
Дата: 03.03.2007
Задача данного материала – обеспечить «мягкое» введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это «почти функциональный» язык, такой как ML или Scheme).
(а когда вторая будет?
Форумы RSDN (генератор интереса к ФП)
Википедия (с очень большой опаской, в основном только для правильного формулирования мыслей)

Изучив весь этот материал, думаю можно будет и с VladD2'ом спорить в ФП
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 09.05.07 19:26
Оценка: 2 (2)
С недавних пор появилась толика свободного времени, и дабы не заскучать решил несколько утолить свой интерес к функциональному программированию, благо во многих неспециализированных, в отличие от этого, топиках как например ФП или некоторые другие упоминаний об нем и/или его приемах предостаточно, а я, признаться, имею только крайне абстарктное представление о нем и всех немайнстримовых языках фигурирующих на RSDN, имющих отношение к функциональной парадигме, таких как Nemerle, Erlang, Haskell, Scala и пр. В связи с этим пришлось систематизировать доступную мне информацию в данной области с целью раставить все точки на "i" в вопросе что есть что, и зачем оно надо. Сам не заметил как в процессе систематизации полуилось что-то путное (по моему, сугубо личному мнению). Решил оформить это в виде небольшой статьи.

К общественности большая просьба указать мне на те неточности и/или некорректные факты, которые имеют место быть в сем манускрипте с целью личного личного удовлетворения и избавления от в корне неправильного понимания предметной области в самом начале интересования ею. Так же буду благодарен за информацию которая по каким-то причинам была мною упущена из вида. Ну и конечно, может кому то, это как и мне будет полезно и/или интересно, такое просвещение
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 13:39
Оценка: 2 (1) +1
Здравствуйте, sharcUs, Вы писали:

U>Функциональный подход — один из путей развития декларативной парадигмы. Своим появлением обязан развитию математических теорий лямбда-исчисления и комбинаторной логики. Для ФП характерна математическая семантика выражений, абстрактность по отношению к ВТ, выводимость типов выражений, отсутствие побочных эффектов ввиду константности всех переменных, аличие механизма отложенного вычисления. Первым языком программирования использующим ФП является LISP. ЯП использующие ФП можно разделить на: относительно чистые: Haskell, Clean (в меньшей степени Erlang, Scheme), гибридные: Nemerle, Scala, и реализуемые лишь частично ФП: Python, ect.

U>Это основные мысли описанные с статье. Не знаю как должна выглядеть систематизация, но я этот термин использую именно для подобных целей

Во-первых, согласен с тов. Кодтом, начинание похвальное. Но даже в этом экстракте масса неточностей.

>обязан развитию математических теорий лямбда-исчисления и комбинаторной логики

Теоретические основы языков программирования охватывают значительно больше областей. Там и теория категорий, и алгебра, и аксиоматическая теория множеств, и теория типов, и всевозможные логики — конструктивные, интуиционистские, линейные и т.д. в которых черт ногу сломит (я уже года 2 в свободное время пытаюсь своими силами в этом разобраться, получается пока не очень). Все это, бесспорно, интересно, особенно если хочется понять, как работают языки программирования, как реализовать их самому, с помощью каких фундаментальных конструкций выражаются модули, объекты, абстрактные типы данных и др. средства, присутствующие в современных языках. Но для начала изучения ФП это все-таки, ИМХО, не то.
К тому же у лямбда-исчисления и комбинаторной логики роль разная. Оба формализма эквивалентны, но если лямбду можно с натяжкой считать языком программирования — если чуть-чуть посахарить, получится язычок, похожий на Схему, то на комбинаторную логику обычно смотрят как на виртуальную машину, в которую можно компилировать ФЯ, на самих SKI-комбинаторах почти никто писать не пытается.

Я предлагаю четко разделить следующие аспекты: 1) какие выгоды получает программист от применения ФП 2) какие у ФП математические корни
Пункт 2 требует значительно более аккуратного к себе отношения.

>Для ФП характерна математическая семантика выражений

Что имеется в виду?

>абстрактность по отношению к ВТ

Опять, что имеется в виду? Что такое ВТ?

>аличие механизма отложенного вычисления

Только в чистых ленивых языках.

>ЯП использующие ФП можно разделить на: относительно чистые:

Относительно чистые — это как рыба второй свежести. Хаскелл и Клин чистые абсолютно, т.е. совсем чистые . А Схема как раз совсем не чистая. Тут градаций нет — если есть оператор присваивания, чистота и нормальный порядок редукции идут лесом.
Re[3]: Немного о функциональном подходе
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 10.05.07 11:41
Оценка: +1 :)
sharcUs,

U>Перечень источников, которые я использовал при систематизации информации для написании статьи:

U>[skiped /]
U>Изучив весь этот материал, думаю можно будет и с VladD2'ом спорить в ФП

А зачем?

И ещё маленькое замечание.

This is all a good idea, but I've found that I've never learned nearly
as much as when I started bashing out some code
. So I highly recommend
starting up some project that's interesting to you too. (A. Wagner)


Так что закрывай браузер, и вперёд to bash out some code
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[8]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 11:58
Оценка: +2
Здравствуйте, VladD2, Вы писали:

L>>Она принимает функцию и аргумент и применяет эту функцию 1 раз к аргументу. Функция 2 — применяет два раза; функция 0 — 0 раз (возвращает аргумент).


VD>Бред .


Не бред, а Church numerals.
Re[4]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 14:00
Оценка: +1 :)
Здравствуйте, deniok, Вы писали:

U>>Изучив весь этот материал, думаю можно будет и с VladD2'ом спорить в ФП

D>В этом увлекательном занятии главное — вовремя остановиться
А лучше и не начинать.
Re[4]: Немного о функциональном подходе, вопрос
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 16.05.07 13:17
Оценка: :))
Здравствуйте, <Аноним>, Вы писали:

L>>Функциональный подход — это декларативный подход, рассматривающий программу, как одну большую функцию (в математическом смысле). Исполнение программы — вычисление функции.

L>>Декларативность подразумевает независимость программы от расположения деклараций (в императивной зависит от расположения инструкций).

А>Тогда Эрланг не функционален, поскольку не декларативен.


Это печально.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.07 22:50
Оценка: 13 (1)
Здравствуйте, Mamut, Вы писали:

M>Может, он слишком сложен в реализации? (Это не праздный вопрос, действительно интересно)


Я не скажу за Скалу (в его компиляторе не разбирался), но судя по Немрлу все не так сложно. Да конечно реализация паттерн-матчинга это не пара ифов, но и сверх сложной задачей ее назвать нельзя. Самый сложный кусок — это построитель дерева решений. Код, конечно, не тривильный (сложная математика), но алгоритмы уже известны и не раз описаны. Есть и готовые реализации. В Немерле его тупо скомуниздили из МЛ-я:
http://nemerle.org/svn/nemerle/trunk/ncc/typing/DecisionTreeBuilder.n
а вот и описание:
http://www.dina.kvl.dk/~sestoft/papers/match.ps.gz (к сожалению, постскрипт).

Вообще, Немерловцы поступили очень прикольно. Они тупо написали первую версию компилятора на ML-е (ОКамле, если не ошибаюсь) и когда получили первую хоть как-то рабочую версию, переписали его на самом себе (благо база общая).

С паттерн-матчингом другая проблема. Он плохо сочетается с ОО-классами. Алгоритм ML рассчитан на работу с алгеброическими типами данных. Все известные мне языки поддерживающие ПМ реализуют и их. В Нмерле это варианты, в Скале кейс-классы, в Эрланге записи (ну, не считаю кортежей) и так дале. Возможно авторы мэйнстримных ООЯ просто боятся вводить в язык еще одну сущность позволяющую хранить данные. Впрочем Васик сто лет имет в своем распоряжении тип данных вариант который очень похож по устройству на алгеброические типы, так что в чем реальная проблема не ясно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Немного о функциональном подходе
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.05.07 20:57
Оценка: 4 (1)
Здравствуйте, sharcUs, Вы писали:

U>в доступных мне источниках про Erlang говорят:

U>

U>...concurrent, functional, distributed...

U>причем все это рассматривают в роли парадигм... вроде. В одних источниках он фигурирует как мультипарадигменный, в других просто как функциональный, в третьих еще как то... Но поскольку наличием только лишь функционального подхода он не ограничивается, то почему же его нельзя назвать мультипарадигменным?

Сам язык является довольно простым динамически типизированным функциональным.
Просто у его ВМ "заточка" под параллелизм и распределённость, т.е. область применения у него такая. Он, конечно, универсальный язык, но вот довольно тупо использовать его для несвойственных ему областей применения.
Имхо оснавная парадигма там функциональная, т.к. она больше всего подходит для такого рода приложений.
Так что не вижу откуда тут "мульти" взяться.

К>>насчёт Питона тож сомнения

U>Ну а как же тогда с наличием кортежей и средств функционального программирования: filter(), map(), zip() и reduce()
U>к тому же в книге Г.Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач "Язык программирования Python" — авторы недвусмысленно намекают на то, что в питоне есть немного от функционального программирования.
Если так подходить, то и в ассемблере ФП можно найти
Вообще во многих языках есть разные черты, просто определяющий момент — насколько они "родные", т.е. насколько востребованы и используются подобные "фичи", мапы и фильтры — это хорошо, но вот как часто "питонисты" пишут при помощи ФВП, т.е. сами эти ФВП, а не просто исопльзуют штатные.

Ещё по тексту:

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

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

Ещё — с какого вдруг любая функция есть ФВП?

Про лямбда-исчисление и комбинаторную логику как-то очень мутно написано, я не понял, что ты хотел сказать — что за анализ вычислимости? Ты о чём?
Про "обычную" короткость функциональных программ — это далеко не обязательно. Бывают ситуации когда это так, но бывает и наоборот.
Сборщик мусора к ФП прямого отношения не имеет. Суть в том, что при функциональном подходе по идее нет изменяемых ячеек памяти, поэтому нельзя делать new/delete.
Про обязательность строгой типизации не совсем понял. Может имелась в виду статическая типизация? Если ты уж про вывод типов говоришь.
Если так, то дофигищи языков функциональных без оной — тот же эрланг, все лиспы и др.
Про адаптированность функций без побочных эффектов — странная формулировка, никто там ничего не адаптирует, просто функциии могут выполняться независимо.
Про медленность и меньшие трудозатраты — очень большой вопрос. Про медленность — смотря с чем сравнивать и как. А трудозатраты порой ой какие нехилые, скажем посмотри сколько компилированный хэллоуворлд на хаскеле весит.
Дальше надоело смотреть — слишком много спорных и странных предложений да и спать пора.
Re[5]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.07 09:34
Оценка: 4 (1)
Здравствуйте, sharcUs, Вы писали:

U>Хм, по тексту практически так и получается Мысль которую я хотел выразить заключалась в том, что в отличие команд в императивном подходе, последовательность которых строго определена и по сути описывает перечень инструкци процессору, описание декларативной операции(-ий) не предполагает такой строгой последовательности и носит больше математическую семантику


Вот и учти замечание. Замени "описание действий" (или как там у тебя?) "на описание желаемого результата".

Кстати по большому счету это обман. Функциональные языки так же в основном описывают вычисления которые нужно произвести. Просто в них есть возможности которые деустивительно декларативны. Одна из них — это паттерн-мачинг. Вот он действительно описывает то что мы хотим получить в виде паттерна. В остальном ФЯ довольно императивны . Скажем я не вижу разницы между фиклом записанным с помощь конструкций wile/for или рекурсивной функции.

Реальную краткость функциональному коду придают манипуляции с функциями (в том числе массовое использование ФВП и замыканий) и паттерн-матчинг. Остальное все от лукавого.

К>>Ещё — с какого вдруг любая функция есть ФВП?

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

Это математический булшит. В ЯП все не может быть функцией иначе вообще нет смысла в вычислениях. Функцию на хлеб не намажешь .
К тому же даже если дойти до такого маразма и начать думать о числах как о функциях, то все равно будут примитивные фукнции которые не являются ФВП. ФВП обазана принимать или возвращать другие функции. А скажем функция "1" ничего не делает. Она является литералом.

В общем, оставь абстрактные рассуждения для математиков. Не отнимай у них их горбушку.

К>>Про обязательность строгой типизации не совсем понял. Может имелась в виду статическая типизация? Если ты уж про вывод типов говоришь.

U>По правде говоря не нашел в статье ничего о обязательности строгой типизации. Если вы о "Большинство функциональных языков являются строго типизированными..." то как я понимаю, это и является синонимом статической типизации, поскольку в ФП все переменные являются неизменяемыми и динамической типизацией обладать не могут. Строгой типизацией называют одно из свойств ФП Душкин и здесь

Значич так... Этот вопрос уже много раз обсуждался у нас в философии. Термин "строгая типизация" нужно выбросить на помойку, так как он неопределенный. Вместо него нужно использоват два определенных термина "статически типизировванный" и "типобезопасный". Так вот ФЯ не обязан быть ни тем, ни другим, хотя большинство ФЯ типобезопасны. Со статической типизацией все еще проще. Есть ФЯ статически типизированные, а есть динамически. Никаой зависимости тут нет. Эрлэнг динамический, а скажем ОКамл статический (даже черезчур). Причем есть и промежуточные решения. Так есть языки которые если что позволяют и переключаться на динамику. Например в Немерле есть макрос late позволющий написать динамический кусок. А в Boo по умолчанию типы выводятс, но если они не могут вывестись, то код автоматически становится динамически типизированным.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Немного о функциональном подходе
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.05.07 08:00
Оценка: 1 (1)
Здравствуйте, sharcUs, Вы писали:

U>По поводу Erlang очевидно Вы правы и мультипарадигменность это громко сказано, просто главной мыслью было то, что в нем сочетаются различные подходы

Можно конкретнее?
Где там подход "различный" по отношению к ФП?
Просто чистофункциональные языки как-то должны общаться с реальным миром, поэтому там появляются "нечистые" вещи, но это же не делает хаскел объектно-ориентированным

К>>Ещё — с какого вдруг любая функция есть ФВП?

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

К>>Про лямбда-исчисление и комбинаторную логику как-то очень мутно написано, я не понял, что ты хотел сказать — что за анализ вычислимости? Ты о чём?

U>с математической точки зрения основой лямбда-исчисления является понятие конверсии, то есть преобразование объектов исчисления к более компактному или более детальному виду, применительно к ФП насколько я понимаю это стало базисом для выведения функций и их формализации, комбинаторная логика — по природе своей теория функций без переменных, в ФП она используется для вывода типа результата в выражения, как я и написал в своей статье. Повторюсь, с ФП знаком только поверхностно, на уровне данного манускрипта, практики использования языков не имею, поэтому если я тут что-то не то говорю, прошу меня поправить
Практику нарабатывать надо — очень помогает с практической стороны понять о чём говоришь. Про конверсию и более компактный (и как-то при этом более детальный) вид опять не понял — как ты объеденяешь необъединимое? Может я тупой, но что-то я не улавливаю мысль опять же.

К>>Про "обычную" короткость функциональных программ — это далеко не обязательно. Бывают ситуации когда это так, но бывает и наоборот.

U>Ну так то оно так, но приближенность ФП к математический семантике во многих случая делают его более лаконичным. Есстественно все зависит от решаемой задачи.
Тогда не приводи квантор всеобщности
А то так фанатичностью веет, любой язык имеет свою нишу, свои плюсы и минусы. Также и функциональный подход — иногда полезный, иногда нет. Серебряной пули не бывает.

К>>Про обязательность строгой типизации не совсем понял. Может имелась в виду статическая типизация? Если ты уж про вывод типов говоришь.

U>По правде говоря не нашел в статье ничего о обязательности строгой типизации. Если вы о "Большинство функциональных языков являются строго типизированными..." то как я понимаю, это и является синонимом статической типизации, поскольку в ФП все переменные являются неизменяемыми и динамической типизацией обладать не могут. Строгой типизацией называют одно из свойств ФП Душкин и здесь
Не путай понятия — строкая и статическая типизация — вещи разные. Скажем есть тот же Эрланг, типизация строгая, но динамическая.
скажем функция элеметная идентити
id(X) -> X.

Какой тип имеет X? Строковый? Числовой?
Он будет определяться в момент вызова функции, скажем если id(2) — числовой, id("a") — строковый.
Есть конечно вывод типов в MLях, хаскеле и не только. Вот там именно статическая типизация.
Но это иной подход, а у тебя как-то слишком обще получается и поэтому непонятно и спорно, имхо
Re: Немного о функциональном подходе
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.05.07 19:32
Оценка: +1
Здравствуйте, sharcUs, Вы писали:

[skipped]

Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный. Он динамический, типобезопасный и функциональный. ВМ только заточена на параллелизм.
Вот Скала и Немерле много логичней тут, насчёт Питона тож сомнения
Re[3]: Немного о функциональном подходе
От: Аноним  
Дата: 10.05.07 08:24
Оценка: +1
К>>Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный.
U>в доступных мне источниках про Erlang говорят:
U>

U>...concurrent, functional, distributed...


Насколько понимаю, "мультипарадигменный" означает что можно использовать по своему выбору одну из нескольких парадигм.
Т.е. например как "желтый или синий", понятия одного типа между которыми надо выбирать.
А в твоей цитате "желтый, сладкий и квадратный" — понятия ортогональные, они все одновременно присутствуют и определают одну "парадигму" — конкурентную и функциональную и распределённую одновременно.


К>>насчёт Питона тож сомнения

U>Ну а как же тогда с наличием кортежей и средств функционального программирования: filter(), map(), zip() и reduce()
Тогда не забывай JavaScript
Замыкания, создание функция на лету....
http://dklab.ru/chicken/nablas/39.html#cont0
Re[2]: Немного о функциональном подходе, вопрос
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.05.07 10:25
Оценка: +1
Здравствуйте, elmal, Вы писали:

E>Кстати, давно хотел задать вопрос. Если я буду писать на чистом Си без использования любых глобальных и статических переменных — будет ли это функциональным подходом или нет? Если нет, то почему не является?


Функциональный подход — это декларативный подход, рассматривающий программу, как одну большую функцию (в математическом смысле). Исполнение программы — вычисление функции.

Декларативность подразумевает независимость программы от расположения деклараций (в императивной зависит от расположения инструкций). Математический смысл — чистоту (для одних и тех же аругментов — одно и то же значение. Отсюда следует, например, однократное присваивание). Функция может использовать другие функции (ФВП) или себя (рекурсия) в декларации.
Re: Немного о функциональном подходе
От: Кодт Россия  
Дата: 10.05.07 11:46
Оценка: +1
Здравствуйте, sharcUs, Вы писали:

U>С недавних пор появилась толика свободного времени, и дабы не заскучать решил несколько утолить свой интерес к функциональному программированию, благо во многих неспециализированных, в отличие от этого, топиках как например ФП или некоторые другие упоминаний об нем и/или его приемах предостаточно, а я, признаться, имею только крайне абстарктное представление о нем и всех немайнстримовых языках фигурирующих на RSDN, имющих отношение к функциональной парадигме, таких как Nemerle, Erlang, Haskell, Scala и пр. В связи с этим пришлось систематизировать доступную мне информацию в данной области с целью раставить все точки на "i" в вопросе что есть что, и зачем оно надо. Сам не заметил как в процессе систематизации полуилось что-то путное (по моему, сугубо личному мнению). Решил оформить это в виде небольшой статьи.


Вообще, выразить и оформить своё осмысление — дело похвальное. Попытки засчитываются
Конкретно по этой статье, однако. У меня не сложилось впечатления, что тебе удалось расставить точки. Это не систематизация, а обзор.
Было бы здорово, если бы ты смог одной-двумя фразами выразить фундаментальную мысль статьи?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Немного о функциональном подходе
От: Mamut Швеция http://dmitriid.com
Дата: 10.05.07 12:08
Оценка: +1
LCR>И ещё маленькое замечание.
LCR>

This is all a good idea, but I've found that I've never learned nearly
LCR>as much as when I started bashing out some code
. So I highly recommend
LCR>starting up some project that's interesting to you too. (A. Wagner)


LCR>Так что закрывай браузер, и вперёд to bash out some code


У Джо Армстронга в его новой книге по Эрлангу в начале есть такой текст:

Did you actually run the shell on your system? If not, please stop and try it now. If you just read the text without typing in the commands, you may think that you understand what is happening but you will not have transferred this knowledge from your brain to your fingertips — programming is not a spectator sport. Just like any form of athletics, you have to practise a lot.



dmitriid.comGitHubLinkedIn
Re[5]: Немного о функциональном подходе
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.05.07 14:59
Оценка: +1
Здравствуйте, sharcUs, Вы писали:

U>а какие ФЯ являются чистыми ленивыми а какие нет?

U>И что значит понятие чистый ленивый язык?

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

U>Тут
Автор: Курилка
Дата: 10.05.07
Курилка высказался по поводу "относительной" чистоты того же Haskell, которого Вы называете "чистыми абсолютно". Я так же склонен полагать, что кристальной чистоты даже у самых чистых языков, коим является Haskell не может быть.


Понятие чистоты формализовано. Градаций нет. Функция print в Хаскель чистая? Чистая! Она всегда возвращает IO () и не имеет побочных эффектов.

Ну, а так, разумеется, программе надо что-то выводить, что-то откуда то получать, так что механизмы для этого имеются. Но от этого Хаскель не становится "нечистым" ;-)
Re[4]: Немного о функциональном подходе
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 11.05.07 01:54
Оценка: +1
Кодт,

К>А с другой стороны, существуют и ИЯ, и ФЯ с утиной типизацией.

Ты про окамл? Там это просто выглядит как duck typing, но внутренняя механика совсем другая, всё строго и безопасно. Поэтому там чаще используется (корректный) термин structural typing.

ps: nevermind, just nitpicking
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[5]: Немного о функциональном подходе
От: palm mute  
Дата: 11.05.07 08:14
Оценка: +1
Здравствуйте, sharcUs, Вы писали:

U>В статье нет чего-то революционного, или чего-то уникального все что здесь отражено, описано уже много раз многими людьми вдоль и поперек

Не воспринимай, плиз, нашу критику негативно. Мы пытаемся быть конструктивными. Документировать свое понимание интересующей области — отличный подход, решпект.
U>Редакция 2, исправленная и доработанная
Можно опять попридираться? Спасибо.
>Дальнейшим развитием функционального программирования стало появление семейства языков ML (Meta Language). Этот язык был задуман как инструмент для >научных и образовательных учреждений
Насколько мне известно, вовсе не для каких-то учреждений. Вспомогательный язык, разработанный специально для теорем прувера LCF.
>спровоцировало пересмотр его концепции, что явилось причиной появления различных диалектов, таких как Standard ML, CaML Light и Objective CaML
Standard ML — это скорее основная ветвь развития. CAML — прорыв в эффективной реализации. "Пересмотра концепции", что бы это ни значило, не было.

>Первым чистым функциональным языком стал язык Miranda,

SASL был раньше

>Главное отличие этих языков заключается в способе вычислений.

Однако непонятно.
Re[4]: Немного о функциональном подходе
От: Tonal- Россия www.promsoft.ru
Дата: 13.05.07 16:33
Оценка: +1
Здравствуйте, Курилка, Вы писали:
К>>>насчёт Питона тож сомнения
U>>Ну а как же тогда с наличием кортежей и средств функционального программирования: filter(), map(), zip() и reduce()
U>>к тому же в книге Г.Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач "Язык программирования Python" — авторы недвусмысленно намекают на то, что в питоне есть немного от функционального программирования.
К>Если так подходить, то и в ассемблере ФП можно найти
К>Вообще во многих языках есть разные черты, просто определяющий момент — насколько они "родные", т.е. насколько востребованы и используются подобные "фичи", мапы и фильтры — это хорошо, но вот как часто "питонисты" пишут при помощи ФВП, т.е. сами эти ФВП, а не просто исопльзуют штатные.
Для Python-а все эти фичи вполне родные. Функции — "первокласные" объекты. Есть лямбды и замыкания, списковые включения. Есть итераторы и генераторы — на них можно строить "ленивые" вычисления.
Так что можно писать практически в функциональном стиле.
Ну и используется всё это довольно активно.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[8]: Немного о функциональном подходе
От: Трурль  
Дата: 15.05.07 13:07
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD> И я не вижу огромной разницы между список публичных свойств и полями алгеброических типов.

Разница в точнностиравна разнице между инициальными и финальными алгебрами.
Re[2]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 09.05.07 20:33
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный.

в доступных мне источниках про Erlang говорят:

...concurrent, functional, distributed...

причем все это рассматривают в роли парадигм... вроде. В одних источниках он фигурирует как мультипарадигменный, в других просто как функциональный, в третьих еще как то... Но поскольку наличием только лишь функционального подхода он не ограничивается, то почему же его нельзя назвать мультипарадигменным?

К>насчёт Питона тож сомнения

Ну а как же тогда с наличием кортежей и средств функционального программирования: filter(), map(), zip() и reduce()
к тому же в книге Г.Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач "Язык программирования Python" — авторы недвусмысленно намекают на то, что в питоне есть немного от функционального программирования.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Немного о функциональном подходе
От: Didro Россия home~pages
Дата: 09.05.07 22:08
Оценка:
U>К общественности большая просьба указать мне на те неточности и/или некорректные факты, которые имеют место быть в сем манускрипте с целью личного личного удовлетворения и избавления от в корне неправильного понимания предметной области в самом начале интересования ею.

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

Ну, это голословное утверждение, т.е. это Ваше мнение об этих языках и о возможностях других людей что-то изучать.

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

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

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

см. выше.

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

+1, ибо иногда декларативность и функциональность объединяют в нечто единое целое, что, судя по общепринятой классификации, не правильно.

О сборщике мусора и строгой типизированности, о "любая функция есть суть ФВП" Курилка уже сказал.

Кроме того сразу бросается в глаза отсутствие ссылок на изученные, так сказать, работы. Скажем в рунете можно было бы сослаться хотя бы на Декларативное программирование и Функциональное программирование для всех
Автор(ы): Вячеслав Ахмечет
Дата: 16.09.2006
Данная статья достаточно кратко и вполне доступно, используя примеры на Java (!), знакомит читателя с базовыми понятиями функционального программирования.
. Я не в коей мере не хочу сказать, что Вы не читали этих работ (даже если это и так ), просто считается "хорошим тоном" ссылаться на имеющиеся работы в рассматриваемой области.
Re[2]: Немного о функциональном подходе
От: Mirrorer  
Дата: 10.05.07 05:40
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный.

К> насчёт Питона тож сомнения

Вполне себе мультипарадигменный. А чего бы нет ?
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[4]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 07:37
Оценка:
Здравствуйте, Курилка, Вы писали:

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

К>одно и то же противопоставляешь?

Хм, по тексту практически так и получается Мысль которую я хотел выразить заключалась в том, что в отличие команд в императивном подходе, последовательность которых строго определена и по сути описывает перечень инструкци процессору, описание декларативной операции(-ий) не предполагает такой строгой последовательности и носит больше математическую семантику

К>Ещё — с какого вдруг любая функция есть ФВП?

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

К>Про лямбда-исчисление и комбинаторную логику как-то очень мутно написано, я не понял, что ты хотел сказать — что за анализ вычислимости? Ты о чём?

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

К>Про "обычную" короткость функциональных программ — это далеко не обязательно. Бывают ситуации когда это так, но бывает и наоборот.

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


К>Про обязательность строгой типизации не совсем понял. Может имелась в виду статическая типизация? Если ты уж про вывод типов говоришь.

По правде говоря не нашел в статье ничего о обязательности строгой типизации. Если вы о "Большинство функциональных языков являются строго типизированными..." то как я понимаю, это и является синонимом статической типизации, поскольку в ФП все переменные являются неизменяемыми и динамической типизацией обладать не могут. Строгой типизацией называют одно из свойств ФП Душкин и здесь
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Немного о функциональном подходе
От: Аноним  
Дата: 10.05.07 08:36
Оценка:
U>Решил оформить это в виде небольшой статьи.

Противоречие в статье.

По ML:

К сожалению данное семейство также не является чисто функциональным.


В заключении:

Поэтому нет смысла сравнивать эти подходы или противопоставлять, гораздо лучше их совместить

Re[3]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.07 09:34
Оценка:
Здравствуйте, sharcUs, Вы писали:

К>>Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный.

U>в доступных мне источниках про Erlang говорят:
U>

U>...concurrent, functional, distributed...


Термины concurrent и distributed из одной оперы и к парадигме не относятся. Это сокорее специализация зыка. Паралелизм можно встроить и в императивный язык (например, в АДА встроен механизм рандеву).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.07 09:34
Оценка:
Здравствуйте, Mirrorer, Вы писали:

К>>Сильно не вчитывался, но довольно странно видеть строку о том, что Эрланг мультипарадигменный.

К>> насчёт Питона тож сомнения

M>Вполне себе мультипарадигменный. А чего бы нет ?


Согласен. Одинаково плохо поддерживает много парадигм.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 09:46
Оценка:
Здравствуйте, Курилка, Вы писали:

U>>По поводу Erlang очевидно Вы правы и мультипарадигменность это громко сказано, просто главной мыслью было то, что в нем сочетаются различные подходы

К>Можно конкретнее?
К>Где там подход "различный" по отношению к ФП?
Ну если concurrent и distributed не воспрепятствуют природе ФП и являются лишь ортогональным дополнением, то ко всему прочему можно отметить, что Erlang появился в результате попыток расширить возможности языка Prolog, с целью реализации в нем параллелизма. А сам Prolog является языком использующим логическую семантику, и основан на исчислении предикатов. В связи с чем я так предполагаю, что в Erlang много чего осталось от Prolog.
источник

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

К>С теоретической точки зрения, конечно, можно числа функциями представить, но с практической нафиг это не упало. А если так, то как функция сложения у тебя получается ФВП?
К сожалению я сейчас могу вести дискуссию только с точки зрения теории, поэтому возможно не совсем отдаю себе отчет в разнице между теоретической ФВП и той которая имеет место на практике.

К>Про конверсию и более компактный (и как-то при этом более детальный) вид опять не понял — как ты объеденяешь необъединимое? Может я тупой, но что-то я не улавливаю мысль опять же.

Мои доводы основаны на сугубо математическом понятии лямбды. То что есть в ФП наверняка отличается от этого, что и сеет Ваше недопонимание

Думаю, если бы я и сам пересмотрел свою статью скажем через месяц, после некоторго практичекого использования ФП, то многие вещи стали бы понятнее и Вам(то есть читателю) в плане того, что и как там было бы написано. Поэтому очевидно так и стоит поступить а там глядишь и новая редакция с дополнением практической части появится — систематизирвать то все равно придеться
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 09:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>По ML:

А>

К сожалению данное семейство также не является чисто функциональным.

А>В заключении:
А>

Поэтому нет смысла сравнивать эти подходы или противопоставлять, гораздо лучше их совместить


Просто при беглом обзоре языков, акцентировалось внимание на том является ли язык чисто фунциональным, возможно с целью поиска максимально близкого к эталонному ФЯ, инетерес был вызван чисто академическими соображениями. В конце статьи делаются выводы относительно того, что наиболее рациональным использованием ФП является его совмещение с ИЯ, что и нашло отражение во многих существующих языках. Поэтому никакого противоречия я не вижу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 09:55
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>К тому же даже если дойти до такого маразма и начать думать о числах как о функциях...

Ну а как же в С# все является объектом:
 "string".ToCharArray()


почему в ФЯ нестоит рассматривать все как функции? Я понимаю, крайности это всегда чревато... но все же.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.07 10:01
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Ну а как же в С# все является объектом:

U>
U> "string".ToCharArray()
U>


Кто сказал все? Попробуй сделать что нибудь с конструкцией, скажем, class.

U>почему в ФЯ нестоит рассматривать все как функции? Я понимаю, крайности это всегда чревато... но все же.


Потому что крайности... ну ты понял .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Немного о функциональном подходе
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.05.07 10:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>К тому же даже если дойти до такого маразма и начать думать о числах как о функциях, то все равно будут примитивные фукнции которые не являются ФВП. ФВП обазана принимать или возвращать другие функции. А скажем функция "1" ничего не делает. Она является литералом.


Она принимает функцию и аргумент и применяет эту функцию 1 раз к аргументу. Функция 2 — применяет два раза; функция 0 — 0 раз (возвращает аргумент).

VD>В общем, оставь абстрактные рассуждения для математиков. Не отнимай у них их горбушку. :)


+1. Чистая лямбда не применима на практике.
Re: Немного о функциональном подходе, вопрос
От: elmal  
Дата: 10.05.07 10:11
Оценка:
Кстати, давно хотел задать вопрос. Если я буду писать на чистом Си без использования любых глобальных и статических переменных — будет ли это функциональным подходом или нет? Если нет, то почему не является?
Re[7]: Немного о функциональном подходе
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.05.07 10:19
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Ну если concurrent и distributed не воспрепятствуют природе ФП и являются лишь ортогональным дополнением, то ко всему прочему можно отметить, что Erlang появился в результате попыток расширить возможности языка Prolog, с целью реализации в нем параллелизма. А сам Prolog является языком использующим логическую семантику, и основан на исчислении предикатов. В связи с чем я так предполагаю, что в Erlang много чего осталось от Prolog.

U>источник
Реально сейчас в эрланге от пролога мало что осталось. Ну нет базиса там из предикатов, всё есть функции детерменированные.
В основном остались синтаксические особенности, паттерн-матчинг отчасти тож оттуда вроде.
А про "воспрепятствуют" — наоборот, ФП как раз очень хорошо ложится в архитектуру ВМ эрланга.

К>>Про конверсию и более компактный (и как-то при этом более детальный) вид опять не понял — как ты объеденяешь необъединимое? Может я тупой, но что-то я не улавливаю мысль опять же.

U>Мои доводы основаны на сугубо математическом понятии лямбды. То что есть в ФП наверняка отличается от этого, что и сеет Ваше недопонимание
Да при чём тут то, что есть в ФП?
Просто тупо не понимаю суть высказываний — что ты хочешь этим сказать.

U>Думаю, если бы я и сам пересмотрел свою статью скажем через месяц, после некоторго практичекого использования ФП, то многие вещи стали бы понятнее и Вам(то есть читателю) в плане того, что и как там было бы написано. Поэтому очевидно так и стоит поступить а там глядишь и новая редакция с дополнением практической части появится — систематизирвать то все равно придеться

Знаешь тут было бы полезно к каждому абзацу иметь какую-нибудь "иллюстрацию из кода", чтоб было видно, о чём речь.
Кстати какой язык возьмёшь, если не секрет?
Re[2]: Немного о функциональном подходе, вопрос
От: Mirrorer  
Дата: 10.05.07 10:24
Оценка:
Здравствуйте, elmal, Вы писали:

E> Если я буду писать на чистом Си без использования любых глобальных и статических переменных — будет ли это функциональным подходом или нет? Если нет, то почему не является?


Будет. Но удобство по сравнению с языками заточеными под ФП будет примерно таким же как ООП на ассемблере.

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

Как говаривал один товарищ

Есть два цвета — черный и белый,
Но есть оттенки, которых больше.
Мы, дети проходных дворов
Найдем сами свой цвет.

В. Цой

... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[8]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 11:45
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Кстати какой язык возьмёшь, если не секрет?

Haskell? Несмотря на то что на форуме не раз видел нелестные высказывания о нем в пользу Erlang'a, по Haskell'у достаточно неплохой документации, в том числе и русской, для того, что бы "въехать" во все, что требуется. Erlang пока к сожалению не может этим похвастаться. А с практической точки зрения несомненно больший интерес вызывает Scheme, хотя это не мой случай.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Немного о функциональном подходе
От: Курилка Россия http://kirya.narod.ru/
Дата: 10.05.07 11:53
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Здравствуйте, Курилка, Вы писали:


К>>Кстати какой язык возьмёшь, если не секрет?

U>Haskell? Несмотря на то что на форуме не раз видел нелестные высказывания о нем в пользу Erlang'a, по Haskell'у достаточно неплохой документации, в том числе и русской, для того, что бы "въехать" во все, что требуется. Erlang пока к сожалению не может этим похвастаться. А с практической точки зрения несомненно больший интерес вызывает Scheme, хотя это не мой случай.

На 1 месяц — ты жесток к себе
Я вот уже не первый раз за него берусь, но так и не готов сказать что начал его нормально понимать
Всёж он очень тяготеет к математике и теории.
Практические же примеры были бы много проще для понимания.
Эрланг прост, но вот всёж слишком задачи у него "другие"
Хотя вроде понятные, но вот взгляд на мир другой ("всё есть процесс").
И, думаю, это будет от ФП отвлекать, если ты ставишь целью знакомство с функциональщиной.
Схема — хороший вариант, почему тебя он смущает? (хотя сам я схему знаю не очень хорошо, больше CL ковырял)
На "гибридные" языки смотреть не хочешь? Или думаешь ООП фенечки будут отвлекать от основной цели?
Re[7]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.05.07 11:53
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Она принимает функцию и аргумент и применяет эту функцию 1 раз к аргументу. Функция 2 — применяет два раза; функция 0 — 0 раз (возвращает аргумент).


Бред .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 12:35
Оценка:
Здравствуйте, Курилка, Вы писали:

К>На 1 месяц — ты жесток к себе

К>Я вот уже не первый раз за него берусь, но так и не готов сказать что начал его нормально понимать
К>Всёж он очень тяготеет к математике и теории.
К>Практические же примеры были бы много проще для понимания.
К>Эрланг прост, но вот всёж слишком задачи у него "другие"
К>Хотя вроде понятные, но вот взгляд на мир другой ("всё есть процесс").
К>И, думаю, это будет от ФП отвлекать, если ты ставишь .
К>Схема — хороший вариант, почему тебя он смущает? (хотя сам я схему знаю не очень хорошо, больше CL ковырял)
К>На "гибридные" языки смотреть не хочешь? Или думаешь ООП фенечки будут отвлекать от основной цели?
Да, конечно, в первую очередь я ставлю перед собой цель знакомство с ФП, и никто и не говорит, что за один месяц — я это говорил в контексте статьи, что через месяц у меня будет большее понятие о ФП, и многие вещи будут видется мне в другом свете.
Гибридные языки возможно действительно хороши, но для того что бы это понять, нужно к этому прийти самому, а не бездумно начитавшись чужих мыслей, и оценив их качество в первую очередь по ораторским способностям человека изложившего их. Возможно это путь наибольшего сопротивления, но пройдя его я твердо буду уверен, что я прав, и что моя позиция будет подкреплена собственным опытом. Что до Erlang'a так меня и вправду немного смущает специфическая его сущность ("всё есть процесс"). Scheme — субъективно, конечно, но там слишком много скобок И еще — если вдруг Haskell окажется мне не под силу — я твердо буду знать, что это не я тупой, это язык тяжелый
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 12:35
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Было бы здорово, если бы ты смог одной-двумя фразами выразить фундаментальную мысль статьи?


Функциональный подход — один из путей развития декларативной парадигмы. Своим появлением обязан развитию математических теорий лямбда-исчисления и комбинаторной логики. Для ФП характерна математическая семантика выражений, абстрактность по отношению к ВТ, выводимость типов выражений, отсутствие побочных эффектов ввиду константности всех переменных, аличие механизма отложенного вычисления. Первым языком программирования использующим ФП является LISP. ЯП использующие ФП можно разделить на: относительно чистые: Haskell, Clean (в меньшей степени Erlang, Scheme), гибридные: Nemerle, Scala, и реализуемые лишь частично ФП: Python, ect.

Это основные мысли описанные с статье. Не знаю как должна выглядеть систематизация, но я этот термин использую именно для подобных целей
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 13:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, lomeo, Вы писали:


L>>Она принимает функцию и аргумент и применяет эту функцию 1 раз к аргументу. Функция 2 — применяет два раза; функция 0 — 0 раз (возвращает аргумент).


VD>Бред .


lomeo говорит о чистом лямбда-исчислении, где нет никаких предопределённых литерных констант. Там числа именно так определяются
\f x -> x -- 0
\f x -> f x -- 1
\f x -> f (f x) -- 2
\f x -> f (f (f x)) -- 3
Re[4]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 13:46
Оценка:
Здравствуйте, palm mute, Вы писали:

>выводимость типов выражений

Совсем забыл, к этой строчке тоже хотел придраться. Выводить типы можно и в императивных языках, просто появился вывод типов в ML; кроме того, полный вывод типов возможен в системе типов Хиндли-Милнера, но в более сложных случаях алгоритма полного вывода типов зачастую не существует.
Re[3]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 13:57
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Изучив весь этот материал, думаю можно будет и с VladD2'ом спорить в ФП


В этом увлекательном занятии главное — вовремя остановиться
Re[4]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 14:16
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>К тому же у лямбда-исчисления и комбинаторной логики роль разная. Оба формализма эквивалентны, но если лямбду можно с натяжкой считать языком программирования — если чуть-чуть посахарить, получится язычок, похожий на Схему, то на комбинаторную логику обычно смотрят как на виртуальную машину, в которую можно компилировать ФЯ, на самих SKI-комбинаторах почти никто писать не пытается.


Вот тут я не то чтобы несогласен, а слегка сомневаюсь. Я думаю, что если (чисто в рамках комбинаторной логики) подсахарить Unlambda, то тоже можно получить симпатичный язычок.
Re[5]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 14:18
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>А лучше и не начинать.


Иногда это невозможно.
Re[4]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 14:22
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Я предлагаю четко разделить следующие аспекты: 1) какие выгоды получает программист от применения ФП 2) какие у ФП математические корни

PM>Пункт 2 требует значительно более аккуратного к себе отношения.
Это и без того понятно, что того что есть особенно по второму вопросу не хватит даже самому нелюбознательному.

>>Для ФП характерна математическая семантика выражений

PM>Что имеется в виду?
Имеется ввиду, что выражения в ФП схожи с Выражениями в есстественной математике.

>>абстрактность по отношению к ВТ

PM>Опять, что имеется в виду? Что такое ВТ?
ВТ — вычислительная техника

>>аличие механизма отложенного вычисления

PM>Только в чистых ленивых языках.
а какие ФЯ являются чистыми ленивыми а какие нет?
И что значит понятие чистый ленивый язык?

>>ЯП использующие ФП можно разделить на: относительно чистые:

PM>Относительно чистые — это как рыба второй свежести.
Тут
Автор: Курилка
Дата: 10.05.07
Курилка высказался по поводу "относительной" чистоты того же Haskell, которого Вы называете "чистыми абсолютно". Я так же склонен полагать, что кристальной чистоты даже у самых чистых языков, коим является Haskell не может быть.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 14:29
Оценка:
Здравствуйте, deniok, Вы писали:

PM>>на самих SKI-комбинаторах почти никто писать не пытается.


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


Я с трудом представляю себе симпатичную анлямбду, но было бы любопытно взглянуть. Мне кажется, что для борьбы со сложностью в больших программах необходимо давать имена промежуточным объектам, и насколько я понимаю, в комбинаторной логике средств для этого нет.
Re[6]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 14:38
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, deniok, Вы писали:


PM>>>на самих SKI-комбинаторах почти никто писать не пытается.


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


PM>Я с трудом представляю себе симпатичную анлямбду, но было бы любопытно взглянуть. Мне кажется, что для борьбы со сложностью в больших программах необходимо давать имена промежуточным объектам, и насколько я понимаю, в комбинаторной логике средств для этого нет.


Добавить B, W, C, Y (возможно) и ещё пяток (главный вопрос каких?). И с песнями вперёд.
Re[5]: Немного о функциональном подходе
От: deniok Россия  
Дата: 10.05.07 14:47
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Здравствуйте, palm mute, Вы писали:


PM>>Я предлагаю четко разделить следующие аспекты: 1) какие выгоды получает программист от применения ФП 2) какие у ФП математические корни

PM>>Пункт 2 требует значительно более аккуратного к себе отношения.
U>Это и без того понятно, что того что есть особенно по второму вопросу не хватит даже самому нелюбознательному.

Эээ. Того что есть по второму вопросу (на английском), достаточно, чтобы утопить самого любознательного
Автор: palm mute
Дата: 09.05.07
.


>>>аличие механизма отложенного вычисления

PM>>Только в чистых ленивых языках.
U>а какие ФЯ являются чистыми ленивыми а какие нет?

Haskell является. Остальные нет.

U>И что значит понятие чистый ленивый язык?


Чуть позже.
Re[5]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 15:15
Оценка:
Здравствуйте, sharcUs, Вы писали:

PM>>Пункт 2 требует значительно более аккуратного к себе отношения.

U>Это и без того понятно, что того что есть особенно по второму вопросу не хватит даже самому нелюбознательному.
Я не говорил, что написано мало. Имелось в виду, что если упоминается некоторая теория или математический факт, упоминание должно быть а) точным и б) к месту. Т.к. статья ненаучная, наукообразие ей только вредит. Это относится и к другим фрагментам — например, вместо "семантики математических выражений" можно было сказать, что значение выражение не зависит от порядка вычислений.

>>>аличие механизма отложенного вычисления

PM>>Только в чистых ленивых языках.
U>а какие ФЯ являются чистыми ленивыми а какие нет?
Те же Хаскелл с Клином.
U>И что значит понятие чистый ленивый язык?
Насчет чистоты lomeo уже ответил, а ленивые вычисления ты сам упоминаешь в статье. Просто отложить вычисление какого-то выражения, а потом его форсировать можно на любом языке, и только в чистых языках вроде Хаскелла ленивость сидит глубоко в виртуальной машине, если можно так выразиться. Между этими двумя подходами к ленивости — настоящая пропасть.


PM>>Относительно чистые — это как рыба второй свежести.

U>Тут
Автор: Курилка
Дата: 10.05.07
Курилка высказался по поводу "относительной" чистоты того же Haskell, которого Вы называете "чистыми абсолютно". Я так же склонен полагать, что кристальной чистоты даже у самых чистых языков, коим является Haskell не может быть.

См. комментарий lomeo.
Re[4]: Немного о функциональном подходе
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 10.05.07 20:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>А интересно, что из всего этого ты открыл для себя, в чём субъективная новизна и глубина. В чём, может быть, личный интерес и блеск в глазах?

К>Если это удастся выразить, то статья перестанет выглядеть компиляцией. (Ну ты понял мою основную претензию, да?)

...

К>Для чего бы ты воспользовался систематизацией, помимо написания статьи? Ну например, для выбора языка под решение конкретной задачи, или для написания нового языка, закрывающего белые пятна в мире существующих языков, и т.п.?


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

Я ответил практически на все свои вопросы, определился с тем, что мне интересно больше всего, и чем я при наличии желания и свободного времени буду интерсоваться — Haskell. Кроме этого, с помощью статьи, в которой нашли свое отражение большинство ответов на интересовавшие меня в данный момент вопросы я научился лучше формулировать свои мысли, знания, то что я знаю, и то чего хочу. Не помню кто и где как-то сказал, что если хочешь что-то изучить — напиши об этом. Я придерживаюсь этой мысли, так как в этом случае помимо накопления и приобретения знаний по существующей теме необходимо еще их корректно сформулировать и доходчиво объяснить, прежде всего для себя. Для меня все то, что я узнал, формулируя, не без помощи отдельных личностей данного форума, за что им огромное спасибо, свои мысли в виде статьи, не исчезнет бесследно и станет первым кирпичиком знаний в области функционального программирования. За ним появятся и другие, более трудоемкие и глубинные. Выразятся ли они подобно этому в виде статьи — покажет время. А пока, отвечая на Ваш вопрос по поводу результата — я думаю я все-таки поставил точки над "i" в интересовавших меня вопросах, по крайней мере для себя

Редакция 2, исправленная и доработанная
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.07 01:06
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Для Python-а все эти фичи вполне родные. Функции — "первокласные" объекты. Есть лямбды и замыкания, списковые включения. Есть итераторы и генераторы — на них можно строить "ленивые" вычисления.

T>Так что можно писать практически в функциональном стиле.
T>Ну и используется всё это довольно активно.

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

Ну, а писать в функциональном стиле можно и на C# 2.0. На C# 3.0 это будет делать даже пожалуй удобно. Но вот однажды написав 100 кил с паттерн-матчингом потом уже без него писать не хочется.

Вообще, я никак не могу понять почему гражданские (как их называет Гапертон) языки не рассмотрели этой очень удобной фишки. Как показал опыт Скалы и Немерла она прекрасно интегрируется во вполне себе ООЯ. То есть по сути фича к ФП отношения не имеет. Просто удачное решение родившееся в среде ФП.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Немного о функциональном подходе
От: deniok Россия  
Дата: 14.05.07 04:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще, я никак не могу понять почему гражданские (как их называет Гапертон) языки не рассмотрели этой очень удобной фишки. Как показал опыт Скалы и Немерла она прекрасно интегрируется во вполне себе ООЯ. То есть по сути фича к ФП отношения не имеет. Просто удачное решение родившееся в среде ФП.


Потому что "гражданские" исходно были ориентированы на максимально "чистое" ООП. Паттерн матчинг хорош, когда внутренняя (алгебраическая) структура типа максимально открыта, тогда по ней тип легко разбирать. А в ООП, наоборот, стремились к унификации всего и вся, в том смысле, что всё есть объект, работа с которым идет через набор методов и свойств, а структурные детали инкапсулированы.
Re[6]: Немного о функциональном подходе
От: Tonal- Россия www.promsoft.ru
Дата: 14.05.07 04:26
Оценка:
Здравствуйте, VladD2, Вы писали:

T>>Для Python-а все эти фичи вполне родные. Функции — "первокласные" объекты. Есть лямбды и замыкания, списковые включения. Есть итераторы и генераторы — на них можно строить "ленивые" вычисления.

T>>Так что можно писать практически в функциональном стиле.
T>>Ну и используется всё это довольно активно.

VD>Главного чего в нем нет — это паттерн-матчинга. Так что писть то на нем конечно можно в фунциональном стиле, но делать это намного менее удобно по сравнению с языками в которых хорошо поддерживается паттерн-матчинг.

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

VD>Ну, а писать в функциональном стиле можно и на C# 2.0. На C# 3.0 это будет делать даже пожалуй удобно. Но вот однажды написав 100 кил с паттерн-матчингом потом уже без него писать не хочется.

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

VD>Вообще, я никак не могу понять почему гражданские (как их называет Гапертон) языки не рассмотрели этой очень удобной фишки. Как показал опыт Скалы и Немерла она прекрасно интегрируется во вполне себе ООЯ. То есть по сути фича к ФП отношения не имеет. Просто удачное решение родившееся в среде ФП.

Надеюсь, что в Python-е оно появиться.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[7]: Немного о функциональном подходе
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 14.05.07 09:06
Оценка:
Здравствуйте, deniok, Вы писали:

D>Потому что "гражданские" исходно были ориентированы на максимально "чистое" ООП. Паттерн матчинг хорош, когда внутренняя (алгебраическая) структура типа максимально открыта, тогда по ней тип легко разбирать. А в ООП, наоборот, стремились к унификации всего и вся, в том смысле, что всё есть объект, работа с которым идет через набор методов и свойств, а структурные детали инкапсулированы.


вспомнил :) palm_mute на это мне напомнил о views patterns и прочих радостях, не ломающих инкапсуляцию.
Re[8]: Немного о функциональном подходе
От: deniok Россия  
Дата: 14.05.07 09:47
Оценка:
Здравствуйте, lomeo, Вы писали:


L>вспомнил palm_mute на это мне напомнил о views patterns и прочих радостях, не ломающих инкапсуляцию.


То-то я пишу и думаю, где-то недавно чуть ли не те же слова были Что, слово в слово процитировал?
Re[9]: Немного о функциональном подходе
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 14.05.07 11:46
Оценка:
Здравствуйте, deniok, Вы писали:

L>>вспомнил :) palm_mute на это мне напомнил о views patterns и прочих радостях, не ломающих инкапсуляцию.


D>То-то я пишу и думаю, где-то недавно чуть ли не те же слова были :)) Что, слово в слово процитировал?


almost ;-)
Re[10]: Немного о функциональном подходе
От: deniok Россия  
Дата: 14.05.07 12:06
Оценка:
Здравствуйте, lomeo, Вы писали:

L>almost


Re[7]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.07 15:45
Оценка:
Здравствуйте, deniok, Вы писали:

D>Потому что "гражданские" исходно были ориентированы на максимально "чистое" ООП. Паттерн матчинг хорош, когда внутренняя (алгебраическая) структура типа максимально открыта, тогда по ней тип легко разбирать. А в ООП, наоборот, стремились к унификации всего и вся, в том смысле, что всё есть объект, работа с которым идет через набор методов и свойств, а структурные детали инкапсулированы.


Не думаю, что это проблема. Любой объект имеет публичный интерфейс. Большинство новых языков выражают его в виде свойств. И я не вижу огромной разницы между список публичных свойств и полями алгеброических типов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.07 15:45
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>То что нет паттерн-матчинг-а — жалко конечно, но он как бы не является основорологающим.


Для меня, на сегодняЮ, он является определяющим в ыборе языка.

VD>>Ну, а писать в функциональном стиле можно и на C# 2.0. На C# 3.0 это будет делать даже пожалуй удобно. Но вот однажды написав 100 кил с паттерн-матчингом потом уже без него писать не хочется.

T>Давно не интересовался.
T>А там уже есть лямбды, картежи и замыкания?

Лямбды (правдо немного многословные) и замыкания были в 2005-ом в C# 2.0. Сильно ты отстал.
Краткие лямбды и аналог кортежей появились в C# 3.0. В прочем, с кортежами не все однозначно. С одной стороны они лучше, так как у них есть именованные поля, но с другой нельзя описать тип кортежа (он толко может быть выведен), что не дает возвращать кортежи из функций.

T>И можно не писать класс на каждый чих?


Согласен. Только есть языки и с кортежами, и ООП, и с паттерн-мачингом. Они еще к тому же компилируемые и шустные. Внимание вопрос! Нахрена упал Питон?

VD>>Вообще, я никак не могу понять почему гражданские (как их называет Гапертон) языки не рассмотрели этой очень удобной фишки. Как показал опыт Скалы и Немерла она прекрасно интегрируется во вполне себе ООЯ. То есть по сути фича к ФП отношения не имеет. Просто удачное решение родившееся в среде ФП.

T>Надеюсь, что в Python-е оно появиться.

А я почему-то не уверен в этом. Что-то большно сильно мэйнстрим обходит паттерн-мачинг. Как-будтно он заразный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Немного о функциональном подходе
От: Mamut Швеция http://dmitriid.com
Дата: 14.05.07 16:18
Оценка:
VD>>>Вообще, я никак не могу понять почему гражданские (как их называет Гапертон) языки не рассмотрели этой очень удобной фишки. Как показал опыт Скалы и Немерла она прекрасно интегрируется во вполне себе ООЯ. То есть по сути фича к ФП отношения не имеет. Просто удачное решение родившееся в среде ФП.
T>>Надеюсь, что в Python-е оно появиться.

VD>А я почему-то не уверен в этом. Что-то большно сильно мэйнстрим обходит паттерн-мачинг. Как-будтно он заразный.


Может, он слишком сложен в реализации? (Это не праздный вопрос, действительно интересно)


dmitriid.comGitHubLinkedIn
Re[8]: Немного о функциональном подходе
От: deniok Россия  
Дата: 15.05.07 08:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, deniok, Вы писали:


D>>Потому что "гражданские" исходно были ориентированы на максимально "чистое" ООП. Паттерн матчинг хорош, когда внутренняя (алгебраическая) структура типа максимально открыта, тогда по ней тип легко разбирать. А в ООП, наоборот, стремились к унификации всего и вся, в том смысле, что всё есть объект, работа с которым идет через набор методов и свойств, а структурные детали инкапсулированы.


VD>Не думаю, что это проблема. Любой объект имеет публичный интерфейс. Большинство новых языков выражают его в виде свойств. И я не вижу огромной разницы между список публичных свойств и полями алгеброических типов.


Алгебраические типы структурно строятся на основе двух операций над типами: "сложения" (disjoint union, перечисление) и "умножения" (cartesian product, кортежи). Плюс (в некоторых языках) — допустима рекурсия в определении типа. То есть типы, в принципе, как строятся, так и матчатся. Список публичных свойств, ИМХО, — более однородная структура — умножение есть, а сложения нету. В каноническом ООП у объекта может быть "и Свойство1, и Свойство2 и Свойство3", но вот "или Свойство4, или Свойство5" — такое только в вариантах или enum'ах. В, Nemerle, насколько я понимаю, это решено через варианты.
Re[9]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.07 14:14
Оценка:
Здравствуйте, deniok, Вы писали:

D>Алгебраические типы структурно строятся на основе двух операций над типами: "сложения" (disjoint union, перечисление) и "умножения" (cartesian product, кортежи). Плюс (в некоторых языках) — допустима рекурсия в определении типа. То есть типы, в принципе, как строятся, так и матчатся. Список публичных свойств, ИМХО, — более однородная структура — умножение есть, а сложения нету. В каноническом ООП у объекта может быть "и Свойство1, и Свойство2 и Свойство3", но вот "или Свойство4, или Свойство5" — такое только в вариантах или enum'ах. В, Nemerle, насколько я понимаю, это решено через варианты.


Извини, но это все пустые слова. Для паттерн-матчинга нужно всего лишь знать описание интерфейса объекта, чтобы можно было создать паттерн сопоставляемый с объектом. В F# и Scala даже разработали по решению для матчига обычных объектов. Оба основаны на идее запоковки и распаковки. В F# решение более декларативно, в Скале это просто объект с двумя функциями (распаковки и запаковки).

Уверен, что можно сделать паттерн-матчинг и без всех этих ухищьрений.

Например:
class A { public Prop1 : int { get{...} }
class B: A { public Prop2 : A { get{...} }

match (x)
{
  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
  | A{ Prop1=1; } => ...
}

впроле можно обработать компилятором. Просто алгоритм будет по сложнее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Немного о функциональном подходе
От: deniok Россия  
Дата: 15.05.07 15:22
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Например:

VD>
VD>class A { public Prop1 : int { get{...} }
VD>class B: A { public Prop2 : A { get{...} }

VD>match (x)
VD>{
VD>  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
VD>  | A{ Prop1=1; } => ...
VD>}
VD>


Не вижу тут главной вкусности — рекурсивного разбора по конструкторам рекурсивно определённого типа данных.

Например, Multi-way trees на Хаскелле
type Forest a = [Tree a] 

data Tree a = Node {
                    rootLabel :: a 
                    subForest :: (Forest a) 
                   } 

drawTree :: Tree String -> String
drawTree  = unlines . draw

draw :: Tree String -> [String]
draw (Node x ts0) = x : drawSubTrees ts0
  where -- разбираем по конструкторам списка
        drawSubTrees []     = []
        drawSubTrees [t]    = "|" : shift "`- " "   " (draw t)
        drawSubTrees (t:ts) = "|" : shift "+- " "|  " (draw t) ++ drawSubTrees ts

        shift first other = zipWith (++) (first : repeat other)


При этом
drawTree (Node "r" [(Node "a" []), (Node "b" [])])

нарисует
r
|
+- a
|
`- b
Re[11]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.07 15:48
Оценка:
Здравствуйте, deniok, Вы писали:

VD>>Например:

VD>>
VD>>class A { public Prop1 : int { get{...} }
VD>>class B: A { public Prop2 : A { get{...} }

VD>>match (x)
VD>>{
VD>>  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
VD>>  | A{ Prop1=1; } => ...
VD>>}
VD>>


D>Не вижу тут главной вкусности — рекурсивного разбора по конструкторам рекурсивно определённого типа данных.


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

Матчинг по последовательностям тоже можно сделать.

В общем, надо всего лишь забыть о наукообразии и поглядеть на реальные потребности реальных людей.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Немного о функциональном подходе
От: deniok Россия  
Дата: 15.05.07 17:33
Оценка:
Здравствуйте, VladD2, Вы писали:

D>>Не вижу тут главной вкусности — рекурсивного разбора по конструкторам рекурсивно определённого типа данных.


VD>Ну, так попей чайку и еще раз внимательно погляди. Конструкторов конечно ты не увидишь, так как не в нихсуть, но все остальное в наличии.


VD>Матчинг по последовательностям тоже можно сделать.


VD>В общем, надо всего лишь забыть о наукообразии и поглядеть на реальные потребности реальных людей.


Мы вообще-то про "гражданские" языки говорим или про Nemerle? В Nemerle, ага, я знаю disjoint union есть, и разбирается всё по вариантам конструкторов (ну может терминология другая) Red, Black:

/// Описывает ветку дерева «красно-черного» дерева.
public variant Node[T] : IEnumerable[T] where T : IComparable[T] 
{
  | Red   { key : T; lchild : Node[T]; rchild : Node[T]; }
  | Black { key : T; lchild : Node[T]; rchild : Node[T]; }
  | Leaf

  /// Подсчет количества элементов.
  public Count : int 
  {
    get
    {
      match (this)
      {
        | Red(_, left, right) | Black(_, left, right) =>
          1 + left.Count + right.Count
        | _ => 0
      }
    }
  }

(c) VladD2
Re[13]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.07 18:58
Оценка:
Здравствуйте, deniok, Вы писали:

D>Мы вообще-то про "гражданские" языки говорим или про Nemerle? В Nemerle, ага, я знаю disjoint union есть, и разбирается всё по вариантам конструкторов (ну может терминология другая) Red, Black:


Пример я вроде привел довольно доходчивый. Что в нем не ясно? Синаксис я использовал Немерловый так как он мне ближе. Но код — это не совсем неперловый. Ты еще раз его погляди...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Немного о функциональном подходе
От: deniok Россия  
Дата: 15.05.07 19:44
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Пример я вроде привел довольно доходчивый. Что в нем не ясно? Синаксис я использовал Немерловый так как он мне ближе. Но код — это не совсем неперловый. Ты еще раз его погляди...


Гляжу ещё раз.

VD>>
VD>>class A { public Prop1 : int { get{...} }
VD>>class B: A { public Prop2 : A { get{...} }

VD>>match (x)
VD>>{
VD>>  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
VD>>  | A{ Prop1=1; } => ...
VD>>}
VD>>


Разматченное слево от => (образец) как тут связывается для использования в правой?
Re[15]: Немного о функциональном подходе
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 15.05.07 21:05
Оценка:
Здравствуйте, deniok, Вы писали:

VD>>>match (x)

VD>>>{
VD>>> | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
VD>>> | A{ Prop1=1; } => ...
VD>>>}
VD>>>[/c#]

D>Разматченное слево от => (образец) как тут связывается для использования в правой?


Предполагаю, что Prop2=B в первой ветке связывает переменную B со свойством Prop2.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.07 21:45
Оценка:
Здравствуйте, deniok, Вы писали:

VD>>>
VD>>>class A { public Prop1 : int { get{...} }
VD>>>class B: A { public Prop2 : A { get{...} }

VD>>>match (x)
VD>>>{
VD>>>  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
VD>>>  | A{ Prop1=1; } => ...
VD>>>}
VD>>>


D>Разматченное слево от => (образец) как тут связывается для использования в правой?


Никак. Этот образец всего лишь находит нужную конструкцию. Он находит экземпляр класса B свойство Prop1 которого равно еденице, а свойство Prop2 ссылается на объект (оптять же) класса B свйосво Prop1 которого равно двум. Если нужна связь, то это будет как-о так:
| B { Prop1=1; Prop2=B { Prop1=2; } as b; } => b.Prop2 *= 2;

или так:
| B { Prop1=1; Prop2=B { Prop1=x; }; } => x

Другими словами мы рассматриваем паттерн как состояние объекта. Уаказываем чему должны быть равны его свойства или используем переменные для связывания со значениями.
Причем обрати внимание, в примере, свойство Prop2 у объекта имеет тип A, что допускает наличие там экземпляра классов наследников A. Соответственно паттерн проверяет, что свойство содержит именно экземпляр класса B и проверяет уже его свойства. Таким образом обходится одно из неприятнешийх свойств ООЯ — необходимость неуклюжих up-cast-ов при работе со списками или иерархиями. Одно это сделало бы язык значительно удобнее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Немного о функциональном подходе
От: deniok Россия  
Дата: 15.05.07 22:49
Оценка:
Здравствуйте, VladD2, Вы писали:


D>>Разматченное слево от => (образец) как тут связывается для использования в правой?


VD>Никак. Этот образец всего лишь находит нужную конструкцию. Он находит экземпляр класса B свойство Prop1 которого равно еденице, а свойство Prop2 ссылается на объект (оптять же) класса B свйосво Prop1 которого равно двум. Если нужна связь, то это будет как-о так:

VD>
VD>| B { Prop1=1; Prop2=B { Prop1=2; } as b; } => b.Prop2 *= 2;
VD>

VD>или так:
VD>
VD>| B { Prop1=1; Prop2=B { Prop1=x; }; } => x
VD>

VD>Другими словами мы рассматриваем паттерн как состояние объекта. Уаказываем чему должны быть равны его свойства или используем переменные для связывания со значениями.
VD>Причем обрати внимание, в примере, свойство Prop2 у объекта имеет тип A, что допускает наличие там экземпляра классов наследников A. Соответственно паттерн проверяет, что свойство содержит именно экземпляр класса B и проверяет уже его свойства. Таким образом обходится одно из неприятнешийх свойств ООЯ — необходимость неуклюжих up-cast-ов при работе со списками или иерархиями. Одно это сделало бы язык значительно удобнее.

А чем это в гипотетическом гражданском языке удобнее, чем

if (typeof(x)=B && x.Prop1=1 && typeof(x.Prop2)=B && x.Prop2.Prop1=2)
    {x.(добрались через "." до нужного свойства)*=2;}
else if (typeof(x)=A && x.Prop1=1)
    {...}


Чуть длиннее, но ИМХО требования к x выражены более ясно
Re[17]: Немного о функциональном подходе
От: Cyberax Марс  
Дата: 15.05.07 23:16
Оценка:
deniok wrote:
> Чуть длиннее, но ИМХО требования к x выражены более ясно
Оно удобнее, когда у тебя несколько подобных условий.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[17]: Немного о функциональном подходе
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.07 23:43
Оценка:
Здравствуйте, deniok, Вы писали:

Еще раз намекаю, что оверквотить не стоит.

D>А чем это в гипотетическом гражданском языке удобнее, чем


D>
D>if (typeof(x)=B && x.Prop1=1 && typeof(x.Prop2)=B && x.Prop2.Prop1=2)
D>    {x.(добрались через "." до нужного свойства)*=2;}
D>else if (typeof(x)=A && x.Prop1=1)
D>    {...}
D>


D>Чуть длиннее, но ИМХО требования к x выражены более ясно


Начнем с того, что это уже 4 строки вместо одной. А закочим тем, что они не равнозначны. Полный код будет выглядеть так:
//  | B{ Prop1=1; Prop2=B { Prop1=2; }; } => ...
B b1 = x as B.
if (b1 != null && b1.Prop1 == 1)
{
  B b2 = b1.Prop2 as B;
    if (b2 != null && b2.Prop1 == 2)
    {
      ...
    }
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Немного о функциональном подходе
От: Аноним  
Дата: 16.05.07 12:52
Оценка:
А>>По ML:
А>>

К сожалению данное семейство также не является чисто функциональным.

А>>В заключении:
А>>

Поэтому нет смысла сравнивать эти подходы или противопоставлять, гораздо лучше их совместить


U>Просто при беглом обзоре языков, акцентировалось внимание на том является ли язык чисто фунциональным, возможно с целью поиска максимально близкого к эталонному ФЯ, инетерес был вызван чисто академическими соображениями. В конце статьи делаются выводы относительно того, что наиболее рациональным использованием ФП является его совмещение с ИЯ, что и нашло отражение во многих существующих языках. Поэтому никакого противоречия я не вижу.


Читающий такую статью новичок (а если не новчиок — зачем ему введение?) не в курсе истории.
У него основная мысль: что это, чем так хорошо что мне нужно (и нужно ли) учить что-то совсем новое и незнакомое ?

И для него эти куски как раз будут говорить что чистая функциональность это хорошо и к этому нужно стремиться и что чистая функциональность это плохо и нужно стремиться к смеси функциональности с императивностью.
Re[3]: Немного о функциональном подходе, вопрос
От: Аноним  
Дата: 16.05.07 13:01
Оценка:
L>Функциональный подход — это декларативный подход, рассматривающий программу, как одну большую функцию (в математическом смысле). Исполнение программы — вычисление функции.
L>Декларативность подразумевает независимость программы от расположения деклараций (в императивной зависит от расположения инструкций).

Тогда Эрланг не функционален, поскольку не декларативен.
Re[5]: Немного о функциональном подходе
От: Аноним  
Дата: 16.05.07 13:12
Оценка:
U>Редакция 2, исправленная и доработанная

Я бы всё-таки добавил JavaScript

Мне кажется есть мнооого JS-программеров, даже вероятно больше чем питоновцев.
Правда их опыт — 10 функций на 100 страничек.
Но так тем более они новички и аудитория этой статьи.
Re[5]: Немного о функциональном подходе, вопрос
От: Аноним  
Дата: 16.05.07 13:35
Оценка:
L>>>Функциональный подход — это декларативный подход, рассматривающий программу, как одну большую функцию (в математическом смысле). Исполнение программы — вычисление функции.
L>>>Декларативность подразумевает независимость программы от расположения деклараций (в императивной зависит от расположения инструкций).

А>>Тогда Эрланг не функционален, поскольку не декларативен.

L>Это печально.

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

func( "Variant 1", _)
func( _, "Variant 2")
func( _, _ )

Пролог переберёт все варианты.

Эрланг, и как я думаю большинство других функциональных языков, выберет один их них — первый подходящий. И тогда все эти языки не функциональны.
Re[6]: Немного о функциональном подходе, вопрос
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 16.05.07 13:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Но от порядка деклараций разных вариантов функции для матчинга разных аргументов — зависит всё.

А>Так что или определение не точное, или многие функциональные языки только называются такими.

Это определение неточное. Я хотел дать понятие ФП и показать, что дело не в глобальных переменных. Я не искал точности, а пытался объяснить смысл.

Есть смысл дальше вести терминологические баталии?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Немного о функциональном подходе
От: deniok Россия  
Дата: 16.05.07 14:17
Оценка:
Здравствуйте, Кодт, Вы писали:


К>Теория суперкомпиляции прямо-таки.


Гуманистической суперкомпиляции.
Re[6]: Немного о функциональном подходе
От: Mamut Швеция http://dmitriid.com
Дата: 16.05.07 14:41
Оценка:
А>Я бы всё-таки добавил JavaScript

А>Мне кажется есть мнооого JS-программеров, даже вероятно больше чем питоновцев.

А>Правда их опыт — 10 функций на 100 страничек.
А>Но так тем более они новички и аудитория этой статьи.

Про Явасрипт надо сначало прочитать это: http://www.hunlock.com/blogs/Functional_Javascript И потом говорить про функциональные фишки в яваскрипте во всеоружии


dmitriid.comGitHubLinkedIn
Re[6]: Немного о функциональном подходе, вопрос
От: Кодт Россия  
Дата: 16.05.07 16:00
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Пролог переберёт все варианты.

Пролог переберёт варианты последовательно!
top(v1,_).
top(_,v2).
top(_,_) :- top(v1,v2).

bottom(_,_) :- bottom(v1,v2).  % получили (_|_)
bottom(v1,_).
bottom(_,v2).

В этом плане разве что С++ является по-настоящему декларативным. Вот там порядок объявления сигнатур функций и специализаций шаблонов точно ни на что не влияет.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[7]: Немного о функциональном подходе
От: Аноним  
Дата: 17.05.07 06:35
Оценка:
M>Про Явасрипт надо сначало прочитать это: http://www.hunlock.com/blogs/Functional_Javascript И потом говорить про функциональные фишки в яваскрипте во всеоружии

Спасибо. Я где-то нарывался на русскоязычную статью, но с лёту не нашел и сербезно исктаь заломало. Впрочм, чуть-чуть про это есть на dklab, ссылку я приводил.
Линковать эту статью к русскоязычному введению наверное не стоит — но лично от меня — спасибо.
Re[7]: Немного о функциональном подходе, вопрос
От: Трурль  
Дата: 17.05.07 10:06
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Пролог переберёт варианты последовательно!

А это смотря какой Пролог.
К>
К>bottom(_,_) :- bottom(v1,v2).  % получили (_|_)
К>bottom(v1,_).
К>bottom(_,v2).
К>


XSB Version 2.2 (Tsingtao) of April 20, 2000
[x86-pc-windows; mode: optimal; engine: chat; scheduling: batched]
| ?- [bottom].
[Compiling .\bottom]
% Compiling predicate bottom/2 as a tabled predicate
[bottom compiled, cpu time used: 0.0310 seconds]
[bottom loaded]

yes
| ?- bottom(v1,v2).
yes
Re[8]: Немного о функциональном подходе, вопрос
От: Кодт Россия  
Дата: 17.05.07 10:47
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А это смотря какой Пролог.

Т>XSB Version 2.2 (Tsingtao) of April 20, 2000

Он что, выбирает наиболее подходящий образец (тогда это какой-то неправильный пролог)? Или как-то умеет распознавать задницу?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[9]: Немного о функциональном подходе, вопрос
От: Трурль  
Дата: 17.05.07 13:47
Оценка:
Здравствуйте, Кодт, Вы писали:

К> Он что, выбирает наиболее подходящий образец (тогда это какой-то неправильный пролог)? Или как-то умеет распознавать задницу?

Он умеет распознавать потенциальную задницу и применяет мемоизацию.
Re[10]: Немного о функциональном подходе, вопрос
От: Кодт Россия  
Дата: 17.05.07 15:18
Оценка:
Здравствуйте, Трурль, Вы писали:

К>> Он что, выбирает наиболее подходящий образец (тогда это какой-то неправильный пролог)? Или как-то умеет распознавать задницу?

Т>Он умеет распознавать потенциальную задницу и применяет мемоизацию.

А как в нём реализованы побочные эффекты?
% встроенный предикат для зацикливания
repeat.
repeat :- repeat.

write_stars :- repeat, write('*'), fail.

% или более осмысленное

read_until_eof(C) :-
    read_char(C);
    read_until_eof(C). % здесь мемоизация не нужна

read_and_print :-
    read_until_eof(C), % рукодельный цикл repeat-fail
        write(C),
        fail;
    write("EOF!!!").
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[11]: Немного о функциональном подходе, вопрос
От: Трурль  
Дата: 18.05.07 05:26
Оценка:
Здравствуйте, Кодт, Вы писали:

К>А как в нём реализованы побочные эффекты?


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