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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 142—133 | 132—123 | 122—113 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 538


    № 132   13-06-2006 02:20 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 127« (Jack Of Shadows)
    ___________________________

    А вот такой трюк сможете проделать ?
    Через классы - запросто. ;-)
    Это будет считаться решением?


    № 131   13-06-2006 02:00 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 128« (torvic)
    ___________________________
    Тогда, для чистоты эксперимента надо приводить и код макроса.

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


    № 130   13-06-2006 01:59 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 125« (Jack Of Shadows)
    ___________________________

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

    Возможностей в плане модульности мне всегда хватало практически во всех языках, которыми я пользовался (дельфи, java, сишарп, лисп, Python etc.)
    Мне тоже. Пока я не попробовал SML и OCaml.


    № 129   13-06-2006 01:56 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 127« (Jack Of Shadows)
    ___________________________
    Ах черт ошибся. Все таки не работает код господина panda.
    Т.е. функции наружу передавать можно. Но closures не получается. Состояние локальной переменной не запоминается. Только через переменную уровня модуля.


    № 128   13-06-2006 01:53 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 109« (Jack Of Shadows)
    ___________________________

    Стандартнее некуда. Это всего лишь макрос, который дает мне list comprehensions в лиспе.

    Тогда, для чистоты эксперимента надо приводить и код макроса.
    Кстати, про list comprehensions. Вы говорили, что порядок записи деклараций в функциональных языках неважен.
    Пример:

    fac n = n * fac (n-1)
    fac 0 = 1


    ERROR - C stack overflow


    № 127   13-06-2006 01:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 117« (panda)
    ___________________________
    Нельзя. Но если очень хочется, то можно:
    Спасибо. Действительно работает! :))
    У меня теперь остается только один повод для нытья. Нет анонимных функций. Т.е. показанный вами пример сильно раздут по сравнению с аналогичным в языках где есть анонимные функции.
    Но слава богу анонимные функции есть в сишарп. А в java есть анонимные классы.
    В правильном направлении идем, товарищи! :))
    А вот такой трюк сможете проделать ?


    (defun make-adder (n)
      #’(lambda (x) (+ x n)))



    Такая вот фабрика функций. Использование:


    (setq add2 (make-adder 2)
    add10 (make-adder 10))



    Создаем при помощи фабрики две функции. add2 добавляет к аргументу 2, add10 соотетственно 10.
    Т.е. в данном случае closures получает параметр извне и запоминает его для дальнейшего использования.
    Боюсь что проделать такое в дельфи вам уже не удастся. Но буду рад, если выставите меня неправым. :))


    № 126   13-06-2006 01:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 124« (Jack Of Shadows)
    ___________________________
    >>>Вообще в наше время такое огромное количество императивных языков со все более и более сильной поддержкой функционального программирования, что обьединять их всех под одним названием "императивные языки" было бы неправильно

    Не только в наше время. Вот занятный примерчик, которому лет 25.


    рrос Queens = (int k, proc(int, int) bool Safe, proc void Print) void:
      if k = 8 then
        Print
      else
        int p = k+1;
        for q to 8 do
          if Safe (p,q) then
            proc SafeNew = (int x,y) bool:
              if у = q or x-p = abs(y-q) then false else Safe(x,y) fi;
            proc PrintNew = void:
              (Print; print((",", "abcdefgh"[p], "12345678"[q])));
            Queens(p, SafeNew, PrintNew)
          fi
        od
      fi;
    proc SafeIni = (int x, y) bool: true;
    proc PrintIni = void: print(newline);
    Queens(О, SafeIni, PrintIni);



    № 125   13-06-2006 01:21 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 123« (Руслан Богатырев)
    ___________________________
    модульное программирование с использованием функционального.
    Поправьте меня если ошибаюсь. Но по моему модульность и функциональность это совершенно ортогональные понятия.
    Т.е. одно не заменяет другое. И оба являются свойствами первостепенной важности.

    Возможностей в плане модульности мне всегда хватало практически во всех языках, которыми я пользовался (дельфи, java, сишарп, лисп, Python etc.)

    Поскольку меня гораздо более доставало отсутствие функциональных фозможностей в тройке (дельфи, java, сишарп)
    То это так сказать мое больное место.
    А вот с ограничениями или какими либо недостатками в модульной системе этих языков я не сталкивался, хотя не буду спорить что их там нет. Но поскольку меня это так сильно не било по жизни, то я этим не очень увлечен.
    Но буду чертовски рад, если у вас есть интересные мысли по этому поводу.
    Особенно с иллюстрациями :))


    № 124   13-06-2006 01:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 118« (Руслан Богатырев)
    ___________________________
    Есть такой язык -- Eiffel Бертрана Мейера. Не сказать, что жутко популярный, но императивный -- точно. 
    А есть еще Python. Тоже императивный и горааздо более популярный чем Эйфель.
    Так в нем и closures есть и map, reduce, foldr

    Скажем так. На этом сайте под императивными языками я понимаю конкретно четверку языков.
    Дельфи (это сайт дельфи в конце концов).
    Оберон (как идейный наследник паскаля-дельфи)
    java и сишарп (как самые популярные языки в мире и фактические наследники дельфи)

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

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



    № 123   13-06-2006 01:02 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 121« (Jack Of Shadows)
    ___________________________

    Из за чего функциональное программирование сидело и ждало своего часа.

    Не могли бы Вы рассказать о таком интересном аспекте, как модульное программирование с использованием функционального. Что есть, какие плюсы и минусы такого смешения?


    <<<... | 142—133 | 132—123 | 122—113 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 538


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

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

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

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

    Перейти на конкретную страницу по номеру
      
    Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

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