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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 242—233 | 232—223 | 222—213 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 528


    № 232   19-06-2006 04:52 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>for i := 1 to N do
    >>>for j := 1 to M do
    >>>B[j,i] := A[i,j];

    Кстати этот пример хуже моего.
    Здесь нет "дополнительных" переменных, но зато здесь есть целая дополнительная матрица B! Вот где настоящий расход памяти.




    № 231   19-06-2006 04:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Или в этом примере не хватает комментария. Тогда приношу извинения за эмоции :)
    Во всяком случае мне непонятно, откуда функция transp понимает, ЧТО ИМЕННО она должна делать с любой произвольной матрицей?



    № 230   19-06-2006 04:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    (define (transp matrix)
    (apply map list matrix))

      (transp '((0 1 2)
                (3 4 5)
                (A B C)
                (D E F))
      )
    ((0 3 A D) (1 4 B E) (2 5 C F))

    >>>Господин torvic привел прекрасный пример...
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Спасибо за "прекрасный" пример :)))
    Из него я вижу хотя бы 2 вещи.
    1) Господин torvic умеет транспонировать матрицы и записывать результат;
    2) Для каждой конкретной матрицы надо сначала транспонировать ее вручную на бумаге, а потом записать результат на языке лисп. Причем сколько матриц, столько будет и программ; А можно попросить показать аналогичный текст решения для матрицы размера 100 на 100 элементов?



    № 229   19-06-2006 02:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    А в приведенном примере вы никакого преимущества не увидели ?
    Увидел. Преимущество вызова библиотечного средства над повторной реализацией циклов.
    Но вот реализован ли вызов библиотеки как вызов функции или оператора (или чем это считается в Лиспе - не знаю) - здесь разница от меня ускользает.

    Вы согласны писать специальные классы в ИЯ вместо циклов, (причем для каждой отдельной заачи придется писать свой собственный класс) только чтобы не признать что в лиспе для этого не надо ничего специального делать ?
    Согласен также пользоваться универсальными алгоритмами, заранее написанными кем-то (например STL). :)
    Точно так же Вы пользуетесь алгоритмами, заранее реализованными внутри Лиспотеки.

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


    № 228   19-06-2006 02:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 226« (Гость)
    ___________________________
    Просто думаю, что реально преимущества Лиспа могут сказаться только на значительно более высоком уровне абстракции, чем рассмотрен в этой задаче.


    А в приведенном примере вы никакого преимущества не увидели ?
    Поразительно!

    Вы согласны писать специальные классы в ИЯ вместо циклов, (причем для каждой отдельной заачи придется писать свой собственный класс) только чтобы не признать что в лиспе для этого не надо ничего специального делать ?


    № 227   19-06-2006 02:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    (Извиняюсь за опечатки: тачпад прикалывается).

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

    На том уровне абстракции, когда рекурсия становится выгоднее цикла.

    Снизу: Факториал эффективнее считается циклом, чем рекурсией.
    Сверху: В природе нет циклов - только рекурсия.

    (Что составляет диалектическое единство противоположностей.)


    № 226   19-06-2006 02:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 224« (Jack Of Shadows)
    ___________________________
    Если вы мне покажете в строчке
    (apply map list matrix))
    хотя бы одну функцию специально написанную для транспонирования, то я с вами соглашусь.

    Если вы покажете мне исходный текст Лиспотеки, я наверно найду в нём низкоуровневые (на уровне C) циклы, которые, будучи применены к матрице, вызывают её транспонирование. :)

    Если передать любую другую функцию, работающюю со списками то получится решение совсем другой задачи.
    Это говорит лишь о том, что транспонирование является частным проявлением некоторого более универсального алгоритма, если этот алгоритм применён к двумерному массиву. (Вроде сортировки, перестановки и т.п.)
    Тем не менее этот алгоритм уже реализован заранее создателями Лиспотеки на имеративном языке (сях).

    Мотор, карбюратор, коробка передач и аккумулятор, все это упрятано в капот машины.
    Но делать на основании этого вывод, что нет никакой разницы между ездой на нормальной машине, и ездой на машине, где вся эта машинерия у вас в салоне, и вы во время езды, руками в ней копаетесь, я надеюсь вы не будете. :))

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

    Ответ на <Сообщение не подписано>:
    Сейчас вам возразят, в том плане, что в императивных языках, кто-то уже зарание позаботился и сделал в салоне от двигателя перегородеку из досок. (Я  - о "наборах библиотек".)
    Я рад, что для Вас, почтеннейший, что библиотека уровня STLдля Вас - "перегородка из досок".
    Тем не менее, чтобы делать что-то на высоком уровне, всё равно сначала кто-то что-то должен сделать на низком.
    И набор библиотек - это, в общем-то то, что и отличает средствпрограммирования от языка программирования.

    P.S. Хочу уточнить, что лично я-то не сомневаюсь, что будущее средств программирования - за чем-нибудь лиспообразным.
    Просто думаю, что реально преимущества Лиспа могут сказаться только на значительно более высоком уровне абстракции, чем рассмотрен в этой задаче.


    № 225   18-06-2006 14:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 224« (Jack Of Shadows)
    ___________________________
    Но делать на основании этого вывод, что нет никакой разницы между ездой на нормальной машине, и ездой на машине, где вся эта машинерия у вас в салоне, и вы во время езды, руками в ней копаетесь, я надеюсь вы не будете. :))
    Сейчас вам возразят, в том плане, что в императивных языках, кто-то уже зарание позаботился и сделал в салоне от двигателя перегородеку из досок. (Я  - о "наборах библиотек".) Правда - вот беда - доски обычно неструганные и приходится регулярно из разных мест занозы выковыривать... ;) А вам на это скажут, что доски, во-первых, не всегда неструганные! А, во-вторых, некоторые фирмы на них даже пакатики и постеры на глянцевой бумаге приколупывают (тип - "с девками")...  А чинить, кто сам не может - всегда телефончик где-нить в уголке загородки написан.


    № 224   18-06-2006 13:56 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 219« (Гость)
    ___________________________

    Т.е. и в случае Лиспа, и в случае заранее созданной библиотеки классов, изящность решения получается лишь за счёт того, что цикл уже написан кем-нибудь заранее.


    Если вы мне покажете в строчке

    (apply map list matrix))


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

    Далее в приведенном лисп коде транспонирование получается только потому что функции map передается функция list. Если передать любую другую функцию, работающюю со списками то получится решение совсем другой задачи.

    Т.е. типовове решение задач со списками в лиспе носит функциональный характер (передача одних функций в другие), в то время как типовове решешие задач со списками в ИЯ носит императивный характер, т.е. циклы, зачастую вложенные, куча временных переменных. (В случае примера Qwerty аж 4!)

    В этом разница, а не в том что в лиспе предусмотритеьно заранее написали функцию транспонирования. :))


    В то же время Лисп-для-виндоус, очевидно, на нижнем уровне реализован на Сях (т.е. WinApi). Соответственно, тот же самый цикл с переменными просто упрятал в глубь лисповой библиотеки.

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

    Мотор, карбюратор, коробка передач и аккумулятор, все это упрятано в капот машины.
    Но делать на основании этого вывод, что нет никакой разницы между ездой на нормальной машине, и ездой на машине, где вся эта машинерия у вас в салоне, и вы во время езды, руками в ней копаетесь, я надеюсь вы не будете. :))


    № 223   18-06-2006 04:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Пример с транспонированием, кстати довольно удачен в плане плюсов-минусов подходов, ведь если перевести его на императивный, то схема выполнения будет выглядеть следующим образом:


    for i := 1 to N do
    for j := 1 to M do
    B[j,i] := A[i,j];


    Т.е. цикл по всем элементам - затраты времени плюс нет "перекидки по месту" - затраты памяти.


    <<<... | 242—233 | 232—223 | 222—213 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 528


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

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

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

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

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

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