Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  10:34[Войти] | [Зарегистрироваться]
Обсуждение темы:
Функциональное программирование

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

Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.

Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.

 Jack Of Shadows

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 5502 сообщения

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Средства разработки. Языки программирования.
  • Delphi 4 or Delphi 5
  • Что приобрести в качестве средства разработки?
  • Delphi6
  • Delphi vs PowerBuilder
  • Сравнение компиляторов
  • Вот и вышла Delphi 7... Вы рады?

  • <<<... | 3232—3223 | 3222—3213 | 3212—3203 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 229


    № 3222   05-10-2007 09:53 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3218« (...)
    ___________________________

    У меня появляется чувство, что Ваша скрытая цель - дать Илье Ермакову возможность доказать, что он прав. Сначала вы даете ему совершенно невнятный пример с continue. Потом такой же невнятный пример на генераторы/yield. yield лучше давать на совсем простом примере. Например, реализацию питоновского xrange() на самом питоне.


    № 3221   05-10-2007 09:52 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3218« (...)
    ___________________________

    Ответ на »сообщение 3215« (Илья Ермаков)
    yield return... - это синтаксический сахар, позволяющий легко и наглядно сделать это. И без yield break здесь тоже никак. Кстати, такими финтами, когда функция возвращает не саму коллекцию, а интерфейс, можно эмулировать ленивость вычислений.

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


    № 3220   05-10-2007 09:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3216« (...)
    ___________________________

    Ответ на »сообщение 3214« (Илья Ермаков)
    ___________________________
    Аналогия не совсем верна. Учитывая ваше стремление к простоте и чистоте языка, я бы привел аналогию с pidgin english - английским языком, на котором говорят туземцы. Или с европейской кампанией по упрощению английского, высмеянной в пародии Ze drim vil kam tru (The dream will come true)  :)))

    Мне кажется, что Ваша аналогия ещё менее верна. "Язык" программирования не имеет никакого отношения к естественному языку. Это формализм, формальная нотация (кстати, Вирт неоднократно подчёркивал, что слово "нотация программирования" лучше, чем "язык программирования").

    Речь ведь не идёт о том, чтобы писать картины, используя только минимум оттенков. Картины - это "неформальный" мир, так же, как и естественный язык.
    Но стоит нам уйти от искусства к полиграфии или к архитектуре, и оказывается, что лафа кончилась, и нам придётся работать в рамках небольшого, выбранного для конкретного изделия, цветового базиса, следуя всем его правилам. Иначе результаты будут малоудовлетворительны.


    № 3219   05-10-2007 09:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3214« (Илья Ермаков)
    ___________________________

    Как насчет такого варианта?

    def hasitem(list, value):
        for item in list:
            if item == value:
                return True
        return False


    В реальности так на Python не пишут, конечно :)
    Это просто для иллюстрации. Не желаете переписать по всем правилам структурного программирования и обосновать гораздо большую понятность варианта с while?


    № 3218   05-10-2007 09:44 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3215« (Илья Ермаков)
    ___________________________
    Поясните, если не трудно - не то даже, КАК это работает, а главное - то, ЧТО Вы этим делаете...
    Функция с типом  IEnumerable<bool> возвращает сразу коллекцию (или массив, в зависимости от контекста) булевых значений. yield return... - это синтаксический сахар, позволяющий легко и наглядно сделать это. И без yield break здесь тоже никак. Кстати, такими финтами, когда функция возвращает не саму коллекцию, а интерфейс, можно эмулировать ленивость вычислений.


    № 3217   05-10-2007 09:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    Выбросить из языка for-циклы и перечислимые типы - дело нехитрое; учить студентов азам программирования вполне возможно и без этих конструкций. А вот программировать в срок и согласно заданным требованиям огромные, сверхсложные, долгоживущие, развиваемые и сопровождаемые системы - не знаю...


    Вспоминается Эллочка-Людоедка с ее словарным запасом в 33 слова. Говорить на таком языке вполне можно, а вот думать - навряд-ли.


    № 3216   05-10-2007 09:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3214« (Илья Ермаков)
    ___________________________
    В таком случае лично я бы отказался от foreach Упаси Господи, только не это!
    Такие элементы как foreach или yield return/brek - это и есть привнесение элементов функциональности в C#. Тут ведь ветка по функциональному программированию, а не по Оберону :)
    Насчет for вы тоже погорячились. Глядя на цикл мы сразу можем сказать, что код внутри него не меняет индексатор, что не скажешь про while.

    Но народ, как обычно, делает другой вывод: нужен стоп-кран, и всегда пользоваться только стоп-краном... :-) Аналогия не совсем верна. Учитывая ваше стремление к простоте и чистоте языка, я бы привел аналогию с pidgin english - английским языком, на котором говорят туземцы. Или с европейской кампанией по упрощению английского, высмеянной в пародии Ze drim vil kam tru (The dream will come true)  :)))


    № 3215   05-10-2007 09:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3211« (...)
    ___________________________

    Ответ на »сообщение 3209« (Илья Ермаков)
    ___________________________
    Хотя... Не хочу превращать форум в хлам из кусков выдранного кода, но вот вам еще примерчик. :)

    Ну если уж примерчик... То почему бы и не пошшелкать :-)
    Но я предупредил, что C# не знаю. Поэтому до конца понять семантику Вашего куска с ходу не могу. Поясните, если не трудно - не то даже, КАК это работает, а главное - то, ЧТО Вы этим делаете...


    № 3214   05-10-2007 09:19 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3213« (...)
    ___________________________

    Ответ на »сообщение 3208« (Trurl)
    ___________________________
    Кстати, конструкция foreach более функциональна, чем указанный WHILE (не_достигнут_конец) & ~(условие_на_искомый_элемент) DO смещаемся к следующему элементу END., т.к. foreach абстрагируется от ненужного в данном случае индексатора коллекции. И без break здесь никак, вот так

    В таком случае лично я бы отказался от foreach (кроме его прямого назначения - пройти всё от начала до конца). Ввели когда-то в язык цикл for. Потом foreach. Почему? Потому что цикл для удобного применения в частных случаях. В каких? По определению for - для тех случаев, когда число раз, которое должен выполниться цикл, известно до его начала. "Поезд запущен от станции до станции". Спрыгнуть нельзя. Но очень нужно. А раз нужно - то вывод: "не на тот поезд сели". Т.е. не тот цикл использовали. Но народ, как обычно, делает другой вывод: нужен стоп-кран, и всегда пользоваться только стоп-краном... :-)


    № 3213   05-10-2007 09:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3208« (Trurl)
    ___________________________
    Кстати, конструкция foreach более функциональна, чем указанный WHILE (не_достигнут_конец) & ~(условие_на_искомый_элемент) DO смещаемся к следующему элементу END., т.к. foreach абстрагируется от ненужного в данном случае индексатора коллекции. И без break здесь никак, вот так


    <<<... | 3232—3223 | 3222—3213 | 3212—3203 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 229


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

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

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования