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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 462—453 | 452—443 | 442—433 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 506


    № 452   19-07-2006 11:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 449« (Артем)
    ___________________________
    Просто, у меня другие задачи.
    И на основании этого вы сделали вывод что Пролог доминирует в логическом программировании ? :))

    Недостаток Forward chaining, по-моему, кроется в том, что пользователь может ввести некорректные правила.

    Интересно. А в пролог нельзя ввести некорректные правила ? Или это тоже из серии "все дело в моем опыте" ? :))

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

    И в том и в другом случае правила будет создавать программист.


    Только вот насчет количественного соотношения Forward и Backward chaining, думаю вы ошибаетесь.


    Откуда такая инфа уважаемый, если вы только что узнали о существовании forward chaning ? :))

    Уверяю вас подавляющее большинство установленных индустриальных экспертных систем сделано при помощи forward chaning (RETE algoritm)

    Пролог (backward chaining) хорошо подходит для задач типа
    "Свет мой зеркальце, скажи
    Да всю правду доложи.
    Кто на свете всех милее,
    Всех прекрасней и белее?"

    А ops (forward chainig) идеально подходит для задач типа

    "Как появится корабль на горизонте - свистать всех наверх!!"
    Или "А ну перестрой мне эти три ханойские башенки."

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

    А ops хорошо подходит для принятия решений на основе большого обьема несвязанной информации. И РЕАГИРОВАНИЯ на изменения этой информации.

    Подумайте сами какие задачи в большинстве случаев приходится решать в бизнесе, особенно в финансовом или в IT


    Насчет ленивых вычислений. В Лиспе они по умолчанию ленивые, или их надо специально обозначать таковыми (как в OCAML)?


    В лиспе вообще НЕТ ленивых вычислений. Как и нет ООП, нет аспектов, нет list comprehensionы. Да черт возьми практически НИЧЕГО НЕТ. И в то же время в лиспе есть все то что только может быть в любом языке программирования. Есть ООП (библиотека CLOS), есть list comprehensions (если читали эту ветку то код макроса я приводил), есть аспекты, и конечно же есть ленивые вычисления (библиотека)

    Дело в том что называть все это библиотеками немножко неправильно.
    Это не библиотеки в вашем понимании этого слова.
    Они не добавляют новые функции в язык. Они добавляют НОВЫЕ КОНСТРУКЦИИ, и вообще могут поменять даже как работает сам язык.

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

    В лиспе библиотека добавляет sql прямо в язык.
    То есть вы можете прямо в лисп коде писать.
    Причем будет проверка при компиляции.

    В лисп таким образом можно добавить любой язык, пролог, опс, да черт возьми html (код html я здесь приводил)

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



    № 451   19-07-2006 09:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 450« ()
    ___________________________
    фактически так можно написать delphi программу при исполнении которой будет создаваться модель lisp программы, а потом исполняться.

    В том что lisp можно написать на delphi нискто не сомневается.


    № 450   19-07-2006 03:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 444« (Jack Of Shadows)
    Так например я не могу позволить себе написать

    x := iif(a>10, LongFunction(a), EvenLongerFunction(a));

    потому что дельфи возьмет и выполнит обе функции LongFunction и EvenLongerFunction



    x:=TMyLongFunction(iif(a>10, LongFunction, EvenLongerFunction))(a);
    Сообщение не подписано


    № 449   19-07-2006 03:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 448« (Артем)
    ___________________________
    Недостаток Forward chaining, по-моему, кроется в том, что пользователь может ввести некорректные правила. А же, как программист по 100 раз продумываю свои правила и более-менее в них уверен. Но, безусловно, Forward chaining тоже имеет право на жизнь. Только вот насчет количественного соотношения Forward и Backward chaining, думаю вы ошибаетесь.


    № 448   19-07-2006 03:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 446« (Jack Of Shadows)
    ___________________________
    Да, а Forward chaining, насколько я понимаю, хорошо подходит для интерактивных экспертных систем. Просто, у меня другие задачи. Пролог я использую для анализа и преобразований текста, а также для реализации некоторых сложных реакций программы на внешние сигналы.


    № 447   19-07-2006 03:01 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 446« (Jack Of Shadows)
    ___________________________
    Да, с iif я притормозил. :)

    Насчет ленивых вычислений. В Лиспе они по умолчанию ленивые, или их надо специально обозначать таковыми (как в OCAML)?


    № 446   19-07-2006 02:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 445« (Артем)
    ___________________________
    Там 2 и 3 параметры - это OUT параметры. Вы не можете запхать в них вызовы функций :)

    Почему out ? in :))

    Вот скажем функция iif


    function IIF(Condition: Boolean; TrueString : String; FalseString: String = ''): String; overload;
    begin
      if Condition then
        result := TrueString
      else
        result := FalseString;
    end;



    Там все три параметра in. Где вы там out увидели ?

    2. Так, все-таки, Лисп может реализовать ленивые (отложенные) вычисления? Вы так и не ответили.

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



    Ой, ну давайте не будем. Я сейчас нарою в Интернете 20 названий разных интеллектуальных систем,


    Да не надо нарывать никаких названий :))
    Вот читайте, просвещайтесь:

    http://en.wikipedia.org/wiki/Backward_chaining
    http://en.wikipedia.org/wiki/Forward_chaining

    Backward chaining is one of the two main methods of reasoning when using inference rules. The other is forward chaining.

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


    Ну, в таком случае, Вагиф, не мешало бы в вашем аккаунте добавить в строчки


    Да, надо бы подновить. 100 лет назад писал, когда еще в Баку жил :))


    № 445   19-07-2006 01:48 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 444« (Jack Of Shadows)
    ___________________________
    1. Чего-то вы перемудрили с
    x := iif(a>10, LongFunction(a), EvenLongerFunction(a));
    Там 2 и 3 параметры - это OUT параметры. Вы не можете запхать в них вызовы функций :)

    2. Так, все-таки, Лисп может реализовать ленивые (отложенные) вычисления? Вы так и не ответили.

    3. На вопрос, о причине создания кучи других ФЯ при наличии такого хорошего Лиспа вы ответили Потому что вам не нравится лисп :)) Серьезно, ведь вы не привели никаких аргументов против лиспа окромя "почему-то мне было противно, когда я его учил" Вообще, вы очень удачно отметаете неудобные вопросы.

    4. Я например в своем сервере правил использую диалект OPS - KnowledgeWorks. При этом KnowledgeWorks имеет встроенный пролог в качестве языка запросов к базе знаний. Я выбрал эту систему именно потому что в ней реализованы оба подхода. То есть я могу решать весь спектр логических задач, а не только половину, доступную вам в прологе. Я вам советую ознакомиться с OPS, поскольку вы любитель логического программирования, и было бы жаль, если для вас осталось бы неизведанной огромная область (половина!!!) логического программирования. Ой, ну давайте не будем. Я сейчас нарою в Интернете 20 названий разных интеллектуальных систем, потом выберу какую-нибудь (не обязательно продукционный язык OPS) и скажу, что наконец-то смог решить весь спектр логических задач. Если серьезно, то в логическом программировании Пролог – это основной фундамент.

    5. Я работал на лиспе с 1992 года. Не могу сказать точное число программ, но достаточно много. Особенно графику (Autocad) и GUI. Сейчас у нас в компании я на лиспе написал и веду сервер правил (rule engine) Ну, в таком случае, Вагиф, не мешало бы в вашем аккаунте добавить в строчки Увлечения: Delphi, теннис, фантастика, Го. и Работаю на Delphi, Java, C#, JavaScript добавить строчки о Лиспе (и об OPS тоже). Иначе мы будем думать, что вы нас обманываете. ;)






    № 444   18-07-2006 15:07 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 443« (Артем)
    ___________________________
    Но, черт возьми, не нравится мне ваш Лисп :)
    Вы не одиноки. Но здесь вам никто не будет навязывать один язык. Здесь речь идет вообще о всем семействе ФЯ.
    Так что если кто то (я) хвалит лисп, это вовсе не означает что мы автоматически ругаем все остальные языки.
    OCAML, ML, Haskell, Clean - все это прекрасные ФЯ.

    1. Что вы думаете о ленивых и энергичных вычислениях в ФП вообще, и  в Лиспе в частности?
    Мне не нравится термин "ленивые", прелпочитаю "отложенные" как более точно передающий сущность механизма.
    Никто не ленится выполнять инстуркции. Он просто отложены до момента когда потребуются (если потребуются вообще) :))

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

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

    Или скажем вы можете сильно упрощать записи ветвлений.
    Например я себе в дельфи сделал с десяток overloaded функций IIF(bool, val1, val2), которые в зависимости от первого значения (tru, false) возвращают второй или третий аргумент.
    Очень удобные функции, но мне постоянно приходится напоминать себе что в дельфи нет отложенных вычислений, и нужно использовать iif с осторожностью. Забывчивость приводит к ужасным ошибкам.

    Так например я не могу позволить себе написать

    x := iif(a>10, LongFunction(a), EvenLongerFunction(a));

    потому что дельфи возьмет и выполнит обе функции LongFunction и EvenLongerFunction

    А вот в случае с хаскелем такая запись вполне корректна. Выполнится только одна из функций.

    2. Почему, все-таки, если Лисп такой хороший, надо было изобретать кучу ФЯ?

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


    3. Что вы можете сказать о таких языках как Mercury, Clean, системе Mozart-Oz, Godel, Erlang?

    Я не могу говорить о сотнях языков. Я знаю лисп, и немножко хаскель.
    Остальные языки - милости прошу освещать тех кто на них работал.
    Эта ветка не для меня лично. Не я один ОБЯЗАН толкать лекции о лиспе.
    Вы можете толкать лекции о ocaml или о прологе. Буду только рад. :))


    № 443   18-07-2006 14:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 442« (Jack Of Shadows)
    ___________________________
    ОК. Я не хочу конфронтации с вами, Jack of Shadows. В принципе, ваше чувство неудовлетворенности от использования стандартных ООП средств можно понять. Но, черт возьми, не нравится мне ваш Лисп :)  Не скрою, я его знаю не очень хорошо – почему-то мне было противно, когда я его учил. Поэтому и переметнулся быстренько на OCAML.
    Да, не могли бы вы ответить на пару моих вопросов?
    1. Что вы думаете о ленивых и энергичных вычислениях в ФП вообще, и  в Лиспе в частности?
    2. Почему, все-таки, если Лисп такой хороший, надо было изобретать кучу ФЯ? Аргумент о сложности Лиспа и предназначенности только для очень умных людей прошу не применять, - Хаскель тоже довольно сложный язык.
    3. Что вы можете сказать о таких языках как Mercury, Clean, системе Mozart-Oz, Godel, Erlang? Если вы с ними знакомы, какой вам понравился или не понравился, и почему?


    <<<... | 462—453 | 452—443 | 442—433 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 506


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

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

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

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

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

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