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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 122—113 | 112—103 | 102—93 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 540


    № 112   12-06-2006 19:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 111« (Jack Of Shadows)
    ___________________________
    Wow ! Ни фига се !! Этот paste.org еще и позволяет кликать на стандартных функциях лиспа в коде и выдает по ним страничку с описанием !!
    Ну крутая весчь! Кстати написана на лиспе !!!
    Это к Qwerty. Если вы воспользуетесь этим сайтом, то уже не сможете сказать что ни разу не использовали программу на лиспе. :)))

    Интересно а по java или си она доки выдает ? Ну это неважно уже :))



    № 111   12-06-2006 19:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 110« (Jack Of Shadows)
    ___________________________
    Честно говоря подсветка синтаксиса на форуме заточена только под паскаль.
    Так что что эти тегом, что с другим - выглядит не ахти. :)))

    Представляю вашему вниманию web сайт http://paste.lisp.org/, который позволяет вам сохранить такм любой кусок кода на любом из поддерживаемых языков (список не большой) После чего дает вам прямую ссылку на ваш кусок кода, который прекрасно выглядит. И даже поддерживает автоматическую подсветку открывающих-закрывающих скобок, begin-end и так далее.

    Вот ссылка на мой lisp quick sort: http://paste.lisp.org/display/21188



    № 110   12-06-2006 19:02 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 109« (Jack Of Shadows)
    ___________________________
    Тьфу черт!! Вместо тега Code задал тег Quote.
    Повторяю:


    (defun qsort (ax)
      (and ax
          (let ((a (car ax)) (x (cdr ax)))
            (append (qsort (remove-if #'(lambda (y) (< a y)) x)) (list a) (qsort (remove-if #'(lambda (y) (>= a y)) x))))))



    № 109   12-06-2006 19:01 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 108« (torvic)
    ___________________________
    А это стандартный Лисп? 
    Стандартнее некуда. Это всего лишь макрос, который дает мне list comprehensions в лиспе. Я уже настолько привык к нему что воспринимаю его как часть себя :))

    В лиспе нет проблем с синтаксисом, потому что любой синтаксис можно привнести в язык маленьким макросом. И поставлять это макрос прямо со своим кодом. Так делают многие (например web библиотека UCW) Ни у кого не возникает никаких вопросов по тому насколько это "стандартно" или нет. Ведь работает на любом лиспе.

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


    (defun qsort (ax)
      (and ax
          (let ((a (car ax)) (x (cdr ax)))
            (append (qsort (remove-if #'(lambda (y) (< a y)) x)) (list a) (qsort (remove-if #'(lambda (y) (>= a y)) x))))))


    Как видите даже биз list comprehensions "стандартный" лисповый вариант не сильно отличается от варианта с lisp comprehensions или от хаскелевского.


    № 108   12-06-2006 17:34 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 107« (Jack Of Shadows)
    ___________________________




    qsort [y (y < - x) (< y a)]

    А это стандартный Лисп?
    P.S. Задавался вопрос что нельзя написать на Лиспе, пожалуйста, его примитивы - car, cdr, cons.


    № 107   12-06-2006 17:07 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 106« (torvic)
    ___________________________
    Можно и на лиспе :))


    (defun qsort (ax)
      (and ax
          (let ((a (car ax)) (x (cdr ax)))
            (append (qsort [y (y < - x) (< y a)]) (list a) (qsort [y (y <- x) (>= y a)])))))



    № 106   12-06-2006 16:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 100« (Jack Of Shadows)
    ___________________________

    Ответ на »сообщение 99« (Mirage)
    ___________________________
    Quick Sort на хаскеле:

    А что не на Лиспе?


    № 105   12-06-2006 14:25 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 102« (Geo)
    ___________________________
    Можно всю жизнь писать sql ни разу не пользуясь sql analyzer. Просто потому что НЕ НУЖНО.
    Можно всю жизнь писать программы ни разу не пользуясь профайлером. По той же самой причине.
    Т.е. это действительно упрощает работу. Вы не думаете о ПРЕЖДЕВРЕМЕННОЙ оптимизации, во время написания программы (что таки облегчает работу, согласитесь)
    Вы думаете об оптимизации только тогда когда она понадобилась. Т.е. вы уткнулись в медленное время работы или в то что программа сьедает всю памать.

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

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

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

    То же самое и с распараллеливанием. Это техническая задача, целью которой является оптимизация по времени выполнения. В отличие от явного распараллеливания вы не думаете об этом заранее, вы не загромождаете свой код огромныйм количеством сложного технического кода, в котором растворяется основная цель программы.
    Более того, даже если впоследствии вы выясните что таки вам надо распараллеливать, потому что где то медленно работает, вы ни пишете такой код, не разрушаете стройное логическое построение своей программы.
    Вы просто помечаете нужные места одним единственным оператором par, и закрываете seq (что то вроде begin end)

    Хотя бы один раз напишите на дельфи программу работы с threads и сравните ее с последовательным вариантом, в котором просто добавьте коментарии \\par и \\seq, обрамляющие функцию, которую вы хотели бы распараллелить.

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



    № 104   12-06-2006 14:03 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 103« (Как слышно? Прием!)
    ___________________________
    Вы не то загрузили уважаемый :))

    Лиспбох это несколько пакетов на выбор в которых редактор emacs настроен для работы с одинм из лиспов.
    Вы выбрали пакет который работает с Allegro CL, коммерческим лиспом который стоит кучу денег.

    Вам надо было взять тот который работает с Clisp - open source лиспом.
    Вот вам прямая ссылка: http://common-lisp.net/pcl/windows/lispbox-0.7-clisp-2.37.zip
    Кроме того можете скачать free express versions коммерческих лиспов.
    С сайтов franz.com (Allegro CL) и lispworks.com (LispWorks)

    Кстати мои соболезнования по поводу dialup
    За долгие годы пользования кабельным интернетом я уже и позабыл что это такое :(



    № 103   12-06-2006 13:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Загрузил LispBox 0.7. Было указано 14 Mb.
    Почти по окончании установщик попросил
    загрузить 203 Mb дополнительно (Allegro CL)
    Люди с чувством юмора. Это плюс.

    P.S. Dual up.


    <<<... | 122—113 | 112—103 | 102—93 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 540


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

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

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

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

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

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