Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 2812 12-04-2007 14:56 | |
Ответ на »сообщение 2810« (Jack Of Shadows)
___________________________
Опять мимо контекста. Это не учебная шахматная программа. Это учебная программа на хаскеле. Она показывает основные принципы построения программ манипулирующих большим и сложносоставным состоянием в интерактивном режиме. При чем тут соответствие правилам шахмат или эффективный алгоритм перебора ?
Просто это побуждает думать (в чем я лично очень сомневаюсь :) ), что взятие на проходе или возможность рокировки как-то особенно не ложатся на Хаскель. :)
№ 2811 12-04-2007 14:49 | |
Ответ на »сообщение 2810« (Jack Of Shadows)
___________________________
Это учебная программа на хаскеле. Она показывает основные принципы построения программ манипулирующих большим и сложносоставным состоянием в интерактивном режиме.
Прошу прощения за свой навязчивый педантизм. Но если люди говорят о какой-то игре и дают ее название, то они должны строго придерживаться ее правил (даже не умея толком в нее играть). В противном случае -- это игра на тему шахмат (дворовые, любительские, назовите как угодно).
Это учебная программа на хаскеле. Она показывает основные принципы построения программ манипулирующих большим и сложносоставным состоянием в интерактивном режиме.
Мне даже страшно себе представить, во что выльется ее текст только при условии четкого соблюдения всех правил ФИДЕ (безотносительно уровня игры) -- http://www.bereg.ru/games/club/andy/ru/rules.htm
Хотелось бы одним глазком взглянуть. А то, что можно манипулировать состоянием в ФП, я как-то давно уже догадываюсь.
№ 2810 12-04-2007 14:35 | |
Ответ на »сообщение 2809« (Руслан Богатырев)
___________________________
2) Рокировка временно невозможна:
а) если поле,
Руслан, я знаю правила шахмат. Вы все время пролетаете мимо контекста. Данное правило не представляет собой проблемы потому что основывается на ТЕКУЩЕМ состоянии доски. То есть для него не нужно запоминать какую то дополнительную информацию о том что было в прошлом (двигались ли король и ладьи)
Вообще-то программа слишком учебная. Минимум, который рекомендуется, -- хотя бы четко соблюдать правила игры (про уровень я молчу).
Опять мимо контекста. Это не учебная шахматная программа. Это учебная программа на хаскеле. Она показывает основные принципы построения программ манипулирующих большим и сложносоставным состоянием в интерактивном режиме. При чем тут соответствие правилам шахмат или эффективный алгоритм перебора ?
№ 2809 12-04-2007 14:08 | |
Ответ на »сообщение 2802« (Jack Of Shadows)
___________________________
Для рокировки имеет значение двигались ли до этого король или ладья.
Это слишком упрощенный взгляд. Тут есть важные нюансы.
(1) Рокировка становится невозможной:
а) если король уже ходил, или
b) с ладьей, если она уже ходила.
(2) Рокировка временно невозможна:
а) если поле, на котором стоит король, или поле, которое он должен пересечь, или поле, которое он должен занять, атаковано одной из фигур партнера;
b) если между королем и ладьей, с которой должна быть произведена рокировка, находится какая-то фигура, мешающая рокировке.
Считается, что король находится “под шахом”, если он атакован хотя бы одной фигурой партнера, даже если такие фигуры сами не могут перемещаться. Объявление шаха не обязательно. Ни одна из фигур не может сделать ход, который ставит или оставляет своего короля под шахом.
Кроме того, по правилам ФИДЕ, если игрок намеренно касается ладьи, а затем короля, рокировка не разрешается. Если игрок, намеревающийся рокировать, касается короля или короля и ладьи одновременно, но рокировка в эту сторону невозможна, игрок должен сделать ход королем, включая рокировку в другую сторону, при условии, что она возможна. Если король не имеет ходов, игрок может сделать любой возможный ход.
Вообще-то программа слишком учебная. Минимум, который рекомендуется, -- хотя бы четко соблюдать правила игры (про уровень я молчу).
№ 2808 12-04-2007 14:06 | |
Ответ на »сообщение 2807« (Jack Of Shadows)
___________________________
А потому алгоритм не нужно строгать совсем.
Приколистчая очепятка получилась. трогать - строгать :))
№ 2807 12-04-2007 14:05 | |
Ответ на »сообщение 2806« (Geniepro)
___________________________
Да не нужно с улучшенным алгоритмом. Ведь цель данной програмки не показать как писать шахматы, а показать как писать интерактивные программы со сложным состоянием на хаскеле.
А потому алгоритм не нужно строгать совсем.
№ 2806 12-04-2007 13:55 | |
Ответ на »сообщение 2804« (Jack Of Shadows)
___________________________
Есть время и желание переписать как вы считаете нужным ?
Типа - инициатива наказуема, да? :о)
Если уж переписывать, так в интерактивный вид с GUI и, самое главное, с улучшенными алгоритмами. А я в шахматах, увы, не силён... :о(
№ 2805 12-04-2007 13:50 | |
Кстати, раз уж зашла речь о демо-примерах, то вот маленькая игрушка на Хаселле: Shu-Thing
http://www.geocities.jp/takascience/haskell/shu-thing.zip
Простенькая OpenGL-игра, в которой маленький космолёт отбивается от кучи зловредных вражеских звездолётов! :-)
Правда, комментариев там почти никаких, но всего один файл 17k, в котором почти весь код приходится на OpenGL-действия...
№ 2804 12-04-2007 13:47 | |
Ответ на »сообщение 2803« (Geniepro)
___________________________
Мда, увеличение глубины дерева с трёх до четырёх замедляет игру примерно в 30 раз...
Еще бы. Метод простого перебора в лоб дает взрывной рост вариантов при увеличении глубины просмотра.
В профессиональных шахматных программах для получения приемлимой скорости просчета используются очень сложные алгоритмы отсечения ветвей вкупе с бааальшой базой данных. А тут элементарный минимакс.
А вот что мне в этом примере не понравилось - то, что все модули экспортируют всё своё содержимое. По-моему, не очень правильное решение...
Есть время и желание переписать как вы считаете нужным ?
№ 2803 12-04-2007 13:40 | |
Ответ на »сообщение 2799« (AVC)
___________________________
* a depth of the game tree of 4 is already very, very slow
Мда, увеличение глубины дерева с трёх до четырёх замедляет игру примерно в 30 раз...
А вот что мне в этом примере не понравилось - то, что все модули экспортируют всё своё содержимое. По-моему, не очень правильное решение...
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|