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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 412—403 | 402—393 | 392—383 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 511


    № 402   30-06-2006 00:56 Ответить на это сообщение Ответить на это сообщение с цитированием
    Интересно, ввиду экзотичности всё же языка,
    а как программировать, электронные ключи защиты?
    В комплекте разработчика приведятся примеры
    для сотни различных версий языков, но лиспа нет.
    Изолированная вставка тут слабовата.


    № 401   29-06-2006 22:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 399« (Q. Werty)
    ___________________________
    если почитать грехема, то там написано что лисп был придуман исключительно как более удобная замена машине тьюринга для описания алгоритмов. И только потом кто-то догадался, что на нем можно написать eval и транслировать во что-то исполнимое. Т.е. алгоритмы можно описывать и функционально.

    кажется, вот:
    http://paulgraham.com/rootsoflisp.html


    № 400   29-06-2006 12:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 399« (Q. Werty)
    ___________________________
    И есть ли на этот счет какие-либо теоремы в математике?

    Есть. Я уже говорил о том что математики доказали что машина Тьюрина и Lambda Calculus Черча, на которой  строится ФП, абсолютно равнозначны.

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

    В функциональном подходе принят идеалистический взгяд на вещи. Памяти море-океан. На каждую задачу можно отвести столько колько она захочет и НИКОГДА не освобождать обратно.
    На самом деле конечно память освобождается, но не человеком. То есть программист об этом не думает, следовательно никогда память не освобождает.

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

    Вне всякого сомнения. Школа не может игнорировать движение прогресса и продолжать учить так как будто ее выпускники будут перфокартами огромный гроб кормить.

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



    № 399   29-06-2006 11:55 Ответить на это сообщение Ответить на это сообщение с цитированием
    После некоторого знакомства с ФЯ возникают не только технические, но и "стратегические" вопросы. Для задач образования они, наверно, не менее важны. Попробую сформулировать некоторые неожиданные для меня выводы, а более опытные специалисты по ФЯ меня поправят, если что не так.
    Итак.
    1) Функциональное программирование - это просто другая парадигма программирования. Класс задач, решаемых с помощью этой парадигмы, не меньше, чем класс задач, решаемых на основе императивной модели. Другими словами, любая задача, имеющая решение в форме алгоритма, может быть описана в функциональной форме;

    2) Программа на ФЯ - это множество определений функций, где результат вычисления не зависит от порядка записи этих определений. Существенным являются только значения аргументов и связи между функциями;

    Можно ли из этого сделать вывод, что любой алгоритм обработки информации может быть выражен в форме множества функций, допускающих операции рекурсии и карринга, в котором сам порядок записи определений функций не имеет никакого значения? И есть ли на этот счет какие-либо теоремы в математике? Если это так, то сами определения алгоритма, которые традиционно даются в средней и высшей школе, должны быть подвергнуты коррекции с учетом функциональной парадигмы. Ведь все эти определения являются, по сути, императивными: алгоритм есть точно определенная ПОСЛЕДОВАТЕЛЬНОСТЬ действий и т.д., и т.п.





    № 398   29-06-2006 00:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Спасибо.
    Просто не там искал :)
    В форме библиотек в полной версии WinHugs действительно есть все, что надо, даже OpenGL. Жаль, что у ребят руки пока не дошли до визуальной cреды :(.



    № 397   28-06-2006 03:06 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 392« (Q. Werty)
    ___________________________
    http://www.haskell.org/tutorial/io.html


    № 396   28-06-2006 02:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 392« (Q. Werty)
    ___________________________


    main = t >> s
    t = putStrLn "Числа Фибоначчи"
    s = print ( map f [1..10] )



    Кстати вы как раз таки использовали функциональную запись. Можно было гораздо проще - императивнее:


    main = do
      putStrLn "Числа Фибоначчи"
      print ( map f [1..10] )



    Как видите практически точная копия с любого ИЯ. И никаких >>


    № 395   28-06-2006 02:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 392« (Q. Werty)
    ___________________________
    Какая в функциональных языках используется "идеология" для создания элементов графического интерфейса? Человеку, испорченному визуальными и компонентными средами, этот вопрос тоже с ходу не дается :))

    Построители GUI не имеют никакого отношение к ФЯ или ИЯ.
    Есть ИЯ с визуальным дизайнером форм (Дельфи, VS). Есть ИЯ без визуального дизайнера форм (с, с++, pascal)

    Так что вам нужно смотреть на наличие конкретных инструментов для языка который вы выбрали.

    Для оиспа визуальные построители есть. Например можете скачать бесплатную epress version Allegro 8
    с сайта franz.com
    Там визуальная среда похожая а дельфи. Т.е. сверху панель компонент, сбоку редактор свойств, посередине форма.

    В хаскеле такой визуальной среды нет (пока) Там GUI делают ручками посредством таких билиотек как скажем http://wxhaskell.sourceforge.net/

    С другой стороны, любая "нормальная" программа - это все-таки какая-то определенная последовательность действий

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

    Вот кстати в вашем примере вы уже не заметили как нарушили императивность, т.е. последовательность.


    s = print ( map f [1..10] )
    f :: Int -> Int
    f 1 = 1
    f 2 = 1
    f n = f(n-1) + f(n-2)



    Ведь вы используете функцию f ДО ее описания. Императивный язык вам этого не позволит. Там вы действительно должны четко соблюдать последовательность.

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


    № 394   28-06-2006 02:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 392« (Q. Werty)
    ___________________________

    Какая в функциональных языках используется "идеология" для создания элементов графического интерфейса? Человеку, испорченному визуальными и компонентными средами, этот вопрос тоже с ходу не дается :))

    Вы не читали сообщение 313 ?


    № 393   28-06-2006 02:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 392« (Q. Werty)
    ___________________________

    С другой стороны, любая "нормальная" программа - это все-таки какая-то определенная последовательность действий - сначала пользователь открывает какую-то форму, потом заполняет поля, потом нажимает кнопку, потом программа вычисляет что-то одно, потом что-то другое и т.д. Как при этом можно обходится без четкого указания что должно следовать за чем, т.е. без "императивности". Пока это не очень понятно.
    Все не совсем так. Современный пользовательский интерфейс ориентирован на события, т.е. исключает строгую последовательность действий. Вы можете попытаться заставить пользователя выполнять все действия в строго оговоренной последовательности, но такое применяется крайне редко (даже обычные визарды дают несколько возможностей: вперед, назад, отмена).
    Так что GUI-программа на языке программирования высокого уровня представляет собой как раз отсутствие четкой последовательности действий.
    Другое дело, что как правило обработчики событий часто ориентированы на изменение состояния программы.


    <<<... | 412—403 | 402—393 | 392—383 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 511


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

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

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

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

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

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