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[2]: Немного о функциональном подходе, вопрос
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.05.07 10:25
Оценка: +1
Здравствуйте, elmal, Вы писали:

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


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

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

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


Вообще, выразить и оформить своё осмысление — дело похвальное. Попытки засчитываются
Конкретно по этой статье, однако. У меня не сложилось впечатления, что тебе удалось расставить точки. Это не систематизация, а обзор.
Было бы здорово, если бы ты смог одной-двумя фразами выразить фундаментальную мысль статьи?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
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[8]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 11:58
Оценка: +2
Здравствуйте, VladD2, Вы писали:

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


VD>Бред .


Не бред, а Church numerals.
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[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[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[4]: Немного о функциональном подходе
От: palm mute  
Дата: 10.05.07 13:46
Оценка:
Здравствуйте, palm mute, Вы писали:

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

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

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


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

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

D>В этом увлекательном занятии главное — вовремя остановиться
А лучше и не начинать.
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>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.