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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 222—213 | 212—203 | 202—193 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 530


    № 212   16-06-2006 14:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Еще лиспы под windows:
    Коммерческие, free express editions.
    Lispwroks: lispwroks.com
    Allegro CL: franz.com

    Липс порталы:
    Scheme: http://www.schemers.org/
    Lisp: http://common-lisp.net/

    Там вы сможете найти ссылки на много разных дистрибутивов, как free and open source так и коммерческих, под разные платформы.


    № 211   16-06-2006 14:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 204« (Q. Werty)
    ___________________________
    1) Где я могу взять официально бесплатный дистрибутив среды программирования на языке ЛИСП (желательно ссылку);
    2) Каков размер этого дистрибутива;
    P.P.S. Только "воду" лить не надо


    Qwerty, это нехорошо честное слово.
    Мало того вы сидите здесь и ждете когда вам на блюдечке поднесут ссылки, хотя и я и другие УЖЕ ПРИВОДИЛИ ЗДЕСЬ ПРЯМЫЕ ССЫЛКИ НА БЕСПЛАТНЫЕ ДИСТРИБУТИВЫ И на книги!
    Хотя бы отмотайте назад, и поищите.

    Так вы и еще и нос воротите. :)))

    Вообще неплохо было бы организовать секцию ссылок в заголовке темы.

    Предлагаю:

    CL для windows:
    CLISP: http://clisp.cons.org/
    LispBox (emacs + clisp): http://common-lisp.net/pcl/windows/lispbox-0.7-clisp-2.37.zip
    Scheme для windows: http://www.drscheme.org/

    Книги на английском:
    Scheme: How to design programs. http://www.htdp.org/
    Lisp:
      Practical Common Lisp. http://www.gigamonkeys.com/book/
      On Lisp. http://www.paulgraham.com/onlisp.html

    Можно еще добавить рессурсы на русском если у кого есть.


    № 210   16-06-2006 13:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 204« (Q. Werty)
    ___________________________
    Спасибо за ссылки. Прочитал ключевые главы и, как говорится, уловил суть.
    Попробую сформулировать свое мнение (именно мое!):
    1) ЛИСП - это интересный подход к организации языка программирования;

    Пока, что - САМЫЙ интересный. ;)

    2) ЛИСП - это не вовсе не "божество" среди языков, который должен их все заменить. Это просто еще один язык, который, как и любой язык программирования имеет свои плюсы и минусы, а также свои классы задач, на которых он особенно удобен и эффективен;
    Он хорош для всего.
    Есть такой сайт: http://www.paulgraham.com/lisp.html
    Советую его эссе почитать. Поучительно. У него много всяких умных мыслей.
    Ещё есть Erann Gat. Просто через гугл наберите (например, вместе c The Idiot's Guide to Special Variables and Lexical Closures или The Complete Idiot’s Guide to Common Lisp Packages ;) ). Из его же работ можно увидеть, насколько универсален Лисп, как он широко применяется и насколько эффективны решения с ним.

    3) Существуют интересные области, где изучение ЛИСПА может идти параллельно с изучением какого-либо императивного языка, поддерживающего указатели (ссылки). Например, изучение логической и физической организации связанных списков;
    Си – однозначно. Или ассемблера. Что бы всю механику показать. Но основным должны быть языки, естественным образом поддерживающие ФП.
    А ещё лучше – применить подход, как в книге «Проектирование и программная реализация экспертных систем на персональных ЭВМ» К. Таунсенд, Д.Фохт. См. Главу 7 «Обработка списков». Там разбирается эмуляция Лиспа Фортом. ;)

    4) Функциональный и императивный подходы к организации программ не ИСКЛЮЧАЮТ, а ДОПОЛНЯЮТ друг друга (принцип дополнительности Бора);
    Только в Лиспе органично поддерживается любой из подходов. С течением времени, я заметил, что когда произносят «универсальный ЯП», то я думаю о Лиспе, а не о Си++.

    А теперь уже не теоретический, а чисто практический вопрос к специалистам по ЛИСПУ.
    ...
    Я работаю с нашем российском среднем образовании, которое не имеет никаких денег для приобретения программных продуктов (на стулья не хватает :)). Кроме этого, нам нужна "мобильность" ПО - "быстренько" перекачать ученику дистрибутив на его флэшку или CD до окончания перемены - это можно если дистрибутив достаточно мал.
    Итак. Предположим, что меня "зацепило" и я готов давать своим ученикам дополнительный спецкурс по ЛИСПу.

    Правда – зацепило? Я ОЧЕНЬ РАД. Тогда – держите:
    1) Где я могу взять официально бесплатный дистрибутив среды программирования на языке ЛИСП (желательно ссылку);
    Смотрите, вот это - «не совсем» Лисп. Но именно эта реализация поможет ввести молодёжь в мир Лиспа. Там есть свои особенности, но всё достаточно прозрачно и не придётся потом «переучивать» и учитель сможет быстро перевести доку, если надо. Хотя, мой знакомый сисадмин по примерам научился программировать и сейчас, если чего заскриптовать надо – только на этом и работает. Дело настолько его захватило, что он даже решил поставить шелл на а ля лисп-среда... ;)

    http://newlisp.org/ - главная страничка (как вам портированность по платформам? ;) )
    http://newlisp.org/index.cgi?page=Downloads – отсюда берём, чего надо

    2) Каков размер этого дистрибутива;
    можно и отсюда брать: http://newlisp.org/downloads/
    но это я привёл, что бы вы на размеры «дистрибутива» посмотрели.

    P.P.S. Только "воду" лить не надо - если ответы на вопросы есть, то давайте. Если этим требованиям ЛИСП не удовлетворяет, то просто скажите НЕТ.
    Я не просто скажу да, я ещё обращу ваше внимание, что помимо накопленной методической базы, при использовании этой «реализации» Лиспа, вы ещё получаете полный доступ ко всяким «мультмедийным» примочкам и всему спектру ПО, используемого на данной Оси.

    ЗЫ Кроме упомянутой книги можно ещё прочитать:
    У.Маурер Введение в программирование на языке ЛИСП. Изд. «МИР», Москва 1976.
    УДК 681.142.2

    С.С.Лавров, Г.С. Силигадзе Автоматическая обработка данных. Язык Лисп и его реализации.  Москва «Наука» Гл. Ред. Физ-мат дит-ры. 1978.
    22.18
    Л 13
    УДК 519.6

    Есть неплохое описание-сравнение в книге:
    Пентковский В.М. Язык программирования Эль-76. Принципы построения языка и руководство к использованию. 2-е изд. М. Наука 1989 ISBN 5-02-013982-3
    ББК 22.18
    П 25
    УДК 519.68

    Ещё есть несколько книг по Прологу. Там интересны места про Лисп. Сейчас не помню, но была переводная книга, автор - Шапиро, довольно богатая книга с множеством рассмотренных тем.


    № 209   16-06-2006 13:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 208« (Q. Werty)
    ___________________________
    Ответили, но не убедили.
    Убедить вас может только практика. Поэтому спорить с вами бесполезно.
    В одном вы правы. Очень много людей не желает прикасаться ни к чему что не привычно им по их обычной жизни.

    Есть люди, которые не любят паскаль из за begin end и :=. Причем заочно, ни разу не попробовав.
    Есть люди, которые не любят Питон из за значимых отступов. Причем заочно, ни разу не попробовав.
    Есть люди, которые не любят лисп из за префиксной нотации. Причем заочно, ни разу не попробовав.

    Увы, такова человеческая натура.


    № 208   16-06-2006 13:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Вам тут уже довольно точно ответили. Хочу просто расширить ответ и
    >>>затронуть само понятие "близко к человеку"
    >>>Близко к человеку конечно же не означает "близко к тому к чему я
    >>>привык" Так например человек, всю жизнь стрелявший из лука, взяв в
    >>>руки винтовку, по вашему должен сказать "кто это сказал что винтовка
    >>>лучше ? Она же такая...непривычная" :))

    Ответили, но не убедили.
    Ваш пример с винтовкой задуман хитро. Но любой пример подобного рода относителен. Если дуло у винтовки из Вашего примера закручено спиралью, то я все-таки предпочту ту, которая мне привычнее :)
    Писать в языке программирования ВЫСОКОГО УРОВНЯ префиксные выражения это примерно то же самое, что использовать двоичные числа вместо десятичных. Близко к человеку - это значит подстраиваться к тому, что привычно человеку, а не компилятору. Это не я должен переписывать привычную для меня математическую формулу в форму, удобную для компилятора. Это компилятор должен воспринимать мои "человеческие" записи в той форме, в которой мне их удобно записывать, и превращать их в то, что удобно ему.
    Если мне в данный момент удобно стрелять из лука - значит я выберу лук, а не винтовку. Или Вы хотите переписать всю математическую литературу в префиксной форме и аргументировать это тем, что со временем все к этому привыкнут.
    P.S. Я понимаю, что это скорее шутка программистов, но, как говорится, все имеет свои причины. Почему только ЛИСП заслужил такой вариант перевода своего названия: (Lots of (Idiotic (Silly (Parentheses))))
    Наверно, доля правды в таком переводе все-таки есть.



    № 207   16-06-2006 12:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 201« (Как слышно? Прием!)
    ___________________________
    Как у лиспа с графикой?

    Что вас интересует ? OpenGL ? Полностью поддерживается.
    2D графика ? Полностью поддерживается.

    Windows GUI ? в бесплатных лиспах нативного GUI нет, но есть билбиотеки для работы с dotnet, java (swing, swt), есть GTK, Tk/Tl

    В платных лиспах (ALC, lispworks) есть нативный windows GUI

    Кстати раз уж спросили про графику, вот вам пример.
    Я думаю все знают что такое Playstation
    Огромное количество компаний пишет игры для playstation с великолепной просто графикой. Конкуренция на этом  сегменте рынка жестокая просто.
    И вот среди тысяч компаний, Sony выбрала не таких гигантов как Namco или CapCom или Activision, а маленькю Naughty Dog и купила ее. Странно правда ? Зачем такому гиганту как Sony нужна малюсенкьая (несколько человек) Naughty Dog ? Да игры у нее классные. Crash Bandicoot например моя любимая игра была. Да и детишек моих тоже :)) А графика там была такая что просто не верилось что это playstation :))
    Но тем не менее, Sony заинтересовалась Naughty Dog по другой причине. Эти ребята умудрялись выпускать на рынок игры обалденного качества и невероятных графических возможностей в считанные месяцы.
    Для сравнения, на игру такого же калибра у гораздо более оснащенной и крупной студии уходило по 2-3 года!!

    Ну гении скажете вы. Sony тоже так думала. А потом как купили компанию, так и сели, придерживая челюсть.
    Они пишут на лиспе !!! (Allegro CL)

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


    № 206   16-06-2006 12:00 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 198« (Q. Werty)
    ___________________________
    К вопросу о близости языка к человеку.
    Просто с детского сада привык к инфиксной.


    Вам тут уже довольно точно ответили. Хочу просто расширить ответ и затронуть само понятие "близко к человеку"
    Близко к человеку конечно же не означает "близко к тому к чему я привык"
    Так например человек, всю жизнь стрелявший из лука, взяв в руки винтовку, по вашему должен сказать "кто это сказал что винтовка лучше ? Она же такая...непривычная" :))

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

    Ближе к человеку означает вот что.
    Вы приходите к компьютеру решать свои задачи. Но из за несовершенства компьютера, вам кроме своих задач еще приходится и решать задачи компьютера.
    Пример с сокобаном я уже приводил.
    Сравните задачу складирования с условием что ящики можно вытаскивать из склада чтобы потом их упорядоченно сложить, с такой же задачей складирования, где надо походу еще и решить другую (не имеющюю к первой НИКАКОГО ОТНОШЕНИЯ) умудриться не выйти с этого ограниченного пространства.
    Разница в сложности колоссальна.

    Таким образом ближе к человеку означает - вы решаете свою задачу. И только! Пусть компьютер сам разбирается со своимим проблемами.

    Второе, исходя из вышеприведенного обьяснения, язык должен обладать необходимыми инструментами, механизмами, чтобы позволить человеку решать свои проблемы, не думая о проблемах компьютера.
    В императивных языках таких инструментов нет.
    Например нет списков!!! Обалдеть! Самый естественный для человека формат данных, не запись (структура), не обьект, СПИСОК! И его нет ни в одном императивном языке! Нет в java, нет сишарп, нет в паскале.

    Сравните с ФЯ. Список является центральной частью, встроен в самое основания языка. Возьмите такие СОВЕРШЕННО РАЗНЫЕ языки как
    ЛИСП - динамический, нечистый ФЯ.
    Ерланг - динамический чистый ФЯ
    хаскель - статический чистый ФЯ с отложенными (lazy) вычислениями.
    ML (CML, Ocaml) - статический нечистый ФЯ с немедленными (eager) вычислениями

    Все построены на списках.

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

    Чем в этом плане лисп отличается от всех остальных ФЯ ?
    Лисп в своем сближении со списком, пошел дальше всех! Лисп это и есть СПИСОК (lisp - LISt Processing)
    В лиспе список записывается так: (a b c). Т.е. скобки и внутри них элементы списка, разделенные пробелами.
    функции в лиспе записываются ТОЧНО ТАКЖЕ (a b c) где а - функция, в с - его параметры.

    Таким образом лисп может просто читать свой собственный код, как запись списков.
    В лиспе можно манипулировать кодом лиспа, также как вы будете манипулировать любым списком.
    Т.е. (first spisok) даст вам имя функции! (rest spisok) даст вам остальную часть - параметры.
    Вы можете легко и просто разбирать код, и собирать его заново, вы можете конструировать код, так легко как ни в каком другом языке! Более того eval(spisok) также запускает этот код на выполнение.
    И вам не надо писать его как строчку , т.е. в кавычках, как вам бы пришлось это делать в ИЯ.


    Объясните, наконец, Jack - ЛИСП - это интерпретатор (Virtual machine) или нативный компилятор.


    Лисп это компилятор. Но компилятор интересный! :))
    В лиспе вы можете скомпилировать любой кусок кода, не оформляя его в какую то структуру типа модуля.

    Вы можете например выделить кусок кода в своем тексте (= x (+ 5 10)) и нажать Ctrl-Alt-X и этот кусочек кода будет СКОМПИЛИРОВАН, и тут же выполнен.

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


    № 205   16-06-2006 10:25 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 204« (Q. Werty)
    ___________________________
    http://sourceforge.net/project/showfiles.php?group_id=1355
    Сообщение не подписано


    № 204   16-06-2006 10:04 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>За то время, что здесь вода в ступе толчётся, уже давно можно было
    >>>гугл "напрячь". На самом деле книга маленькая. Её можно было бы выпустить
    >>>одним очень удобным томом издаеим формата питерской классики CS.

    Спасибо за ссылки. Прочитал ключевые главы и, как говорится, уловил суть.
    Попробую сформулировать свое мнение (именно мое!):
    1) ЛИСП - это интересный подход к организации языка программирования;
    2) ЛИСП - это не вовсе не "божество" среди языков, который должен их все заменить. Это просто еще один язык, который, как и любой язык программирования имеет свои плюсы и минусы, а также свои классы задач, на которых он особенно удобен и эффективен;
    3) Существуют интересные области, где изучение ЛИСПА может идти параллельно с изучением какого-либо императивного языка, поддерживающего указатели (ссылки). Например, изучение логической и физической организации связанных списков;
    4) Функциональный и императивный подходы к организации программ не ИСКЛЮЧАЮТ, а ДОПОЛНЯЮТ друг друга (принцип дополнительности Бора);

    P.S.
    А теперь уже не теоретический, а чисто практический вопрос к специалистам по ЛИСПУ. Я работаю с нашем российском среднем образовании, которое не имеет никаких денег для приобретения программных продуктов (на стулья не хватает :)). Кроме этого, нам нужна "мобильность" ПО - "быстренько" перекачать ученику дистрибутив на его флэшку или CD до окончания перемены - это можно если дистрибутив достаточно мал.
    Блэкбокс (КП) удовлетворяет обоим требованиям:
    1. открыт, т.е. официально бесплатен;
    2. мал: дистрибутив составляет ~7Мб;
    Итак. Предположим, что меня "зацепило" и я готов давать своим ученикам дополнительный спецкурс по ЛИСПу.
    1) Где я могу взять официально бесплатный дистрибутив среды программирования на языке ЛИСП (желательно ссылку);
    2) Каков размер этого дистрибутива;

    P.P.S. Только "воду" лить не надо - если ответы на вопросы есть, то давайте. Если этим требованиям ЛИСП не удовлетворяет, то просто скажите НЕТ.
    С уважением.






    № 203   16-06-2006 05:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 202« (Q. Werty)
    ___________________________
    Можно ли это воспринимать таким образом:
    Список есть универсальная модель для представления данных и алгоритмов (кода)? Мне это интересно, как человеку, который ценит математический фундамент любого предмета.

    http://fenster.name/docs/clisp/
    http://www.dvo.ru/tech/lisp/index.html
    http://asvk.cs.msu.su/~sauil/2len4ik/%dd.%20%d5%fe%e2%b8%ed%e5%ed,%20%c8.%20%d1%e5%ef%ef%ff%ed%e5%ed%20-%20%cc%e8%f0%20%eb%e8%f1%ef%e0/
    За то время, что здесь вода в ступе толчётся, уже давно можно было гугл "напрячь".
    На самом деле книга маленькая. Её можно было бы выпустить одним очень удобным томом издаеим формата питерской классики CS.
    Особенно советую почитать первые шесть глав второго тома. Для общего обзора реализаций "мультипарадигмальности" лиспа. Постоянно держите в памяти то обстоятельство, что это - НЕ средства лиспа как такового, а его ВОЗМОЖНОСТИ подстраиваться под представления программиста. То есть если появится что-то совершенно новое в методологии, парадигме и подходах - лисп будет готов для их восприятия и создания адекватных средств воплощения.
    Сообщение не подписано


    <<<... | 222—213 | 212—203 | 202—193 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 530


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

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

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

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

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

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