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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 2022—2013 | 2012—2003 | 2002—1993 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 350


    № 2012   24-02-2007 00:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2011« (AVC)
    ___________________________


    (defun my-sort (x)
      (if x (let* ((z (car x))
                  (left (remove-if #'(lambda (y) (>= y z)) x))
                  (right (remove-if #'(lambda (y) (<= y z)) x)))
              (append (my-sort left) (list z) (my-sort right)))
        nil))



    Это лисп. На схему думаю вам не трудно будет перевести.
    Как писать в функциональном стиле.
    1. Никогда не менять исходный список. Всегда создавать новый.
    2. Всегда создавать рекурсивно, никаких копирований в новую структуру и работе в ней.

    Это конечно один из многих алгоритмов.
    Можно по разному сортировать, например merge-sort.


    № 2011   23-02-2007 23:34 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2010« (AVC)
    ___________________________

    Если игнорировать алгоритм, то вопрос в следующем: как написать сортировку в функциональном стиле?
    Когда мы пишем сортировку на ИЯ, то меняем исходный массив (список и т.п.).
    Для ФЯ это вряд ли хорошо.
    Поэтому, вероятно, следует формировать второй список, а потом его вернуть.
    Но остается та проблема, что неудобно (и неэффективно) писать алгоритм сортировки, совершенно не меняя исходной структуры.
    Значит, перед тем, как заняться сортировкой имеет смысл скопировать исходную структуру в новую (промежуточную), от которой потом отрывать по кусочку...
    Короче, не совсем ясно.
    Правда, может быть я устал и не вижу какого-то совершенно очевидного решения.
     AVC


    № 2010   23-02-2007 22:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Как на Схеме пишутся сортировки? (Вообще работа со структурами данных.)
    Пытаюсь угадать, сделал набросок (на алгоритм сейчас наплевать), но такое чувство, что получилось ужасно!

    ; поменять местами элементы в списке
    (define (swap x L R)
        (define temp (list-ref x L))
        (set-car! (list-tail x L) (list-ref x R))
        (set-car! (list-tail x R) temp))
    ; моя самая первая сортировка на ФЯ -- ужасно!!
    (define (sort x)
        (define n (length x))
        (define (sort-iter i)
          (cond
            ((and (< 0 i) (> (list-ref x (- i 1)) (list-ref x i)))
            (swap x (- i 1) i)
            (sort-iter (- i 1)))
            ))
        (define (loop right)
          (cond
            ((< right n) (sort-iter right) (loop (+ right 1)))))
        (loop 1)
        x)

     AVC


    № 2009   23-02-2007 19:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2008« (Jack Of Shadows)
    ___________________________

    Ответ на »сообщение 2007« (AVC)
    ___________________________
    Если вам приходится заниматься web приложениями то вот тут: http://www.scheme.dk/blog/index.html
    серия обучающих статей для DrScheme


    Спасибо!
     AVC


    № 2008   23-02-2007 19:06 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2007« (AVC)
    ___________________________
    Если вам приходится заниматься web приложениями то вот тут: http://www.scheme.dk/blog/index.html
    серия обучающих статей для DrScheme



    № 2007   23-02-2007 19:02 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1980« (Geniepro)
    ___________________________

    Ответ на »сообщение 1976« (AVC)
    ___________________________

    >>>Так что за ссылку -- персональное спасибо Geniepro!

    Завсегда пожалуйста! Надеюсь, Вы всё таки не забросите эту игрушку, а хотя бы время от времени будете уделять ей время! ;о)
    Авось пригодится? Классика, как-никак...


    Нет, не заброшу. Напротив, как только есть минутка -- стараюсь что-нибудь накропать на Схеме.
    Пока что осилил понятие блочной структуры (взятой из Алгола), подстановочной (substitution) модели вычислений и связанное с ней понятие хвостовой рекурсии. (Повторюсь, я начинающий.)
    Был приятно удивлен, осознав, что благодаря хвостовой рекурсии в Схеме есть аналог цикла.
    Накропал итеративную версию для чисел Фибоначчи.

    ; Вычисление числа Фибоначчи с помощью хвостовой рекурсии.
    (define (fib-iter n)
        (define (iter a b n)
          (cond
            ((= n 0) b)
            (else (iter b (+ a b) (- n 1)))))
        (iter 0 1 (- n 1)))

    Небольшую задержку стал ощущать только при (fib-iter 100000).
    Зато хорошо осознал, что кролики -- не только ценный мех, но и чудовищная сила размножения. :)
    (Говорят, что числа Фибоначчи восходят к моделированию размножения кроликов.)
    Если получится освоить (хотя бы в какой-то степени) ФП, то надеюсь, что нам станет гораздо легче находить общий язык.
    Предполагаю, что основные проблемы поджидают меня в структурах данных.

    Если бы Вы ещё поигрались бы с Хаскеллом - ещё замечательнее стало бы! Мозгам полезно получать встряску время от времени, шаблоны ломать...

    С Хаскелем уже пробовал, как-то не пошло...
    Возможно, лично мне лучше начинать именно со Схемы, а потом вернуться к Хаскелю.
     AVC


    № 2006   23-02-2007 18:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Мне тут на #haskell уже даже код подкинули:

    http://hpaste.org/629

    Там как раз императивные операции в списке, причем следующая использует результат предыдущей.
    Ну силен хаскель :))


    № 2005   23-02-2007 18:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Хехе

    sequence_ [readFile "C:/Dev/Haskell/Fibonacci.hs" , writeFile "d:/Fibonacci.hs" "foo" >> return ""]

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


    № 2004   23-02-2007 17:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1999« (Илья Ермаков)
    ___________________________

    Взгляните на программу как на осязаемую в "железных" понятиях схему - и поймете сущность Оберона.

    Кстати, мне приходилось разрабатывать приборы, и некоторые из них противоречили одному из требований Оберонов: модули должны быть в единственном экземпляре.
    Мне как-раз приходилось делать приборы, в которых было по нескольку одинаковых модулей, работающих параллельно, и общающихся по общей шине с центральным управляющим модулем...

    ЗЫ. Эх, не достался мне 2000-й пост... :о))


    № 2003   23-02-2007 16:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    "The Pros and Cons of Teaching Purely Functional Programming in First Year"
    Manuel M. T. Chakravarty & Gabriele Keller

    Авторы статьи на основании своего успешного опыта обучения Хаскеллу студентов-первогодков (классы до 600 студентов - размах у них там нехилый!) обосновывают правильность выбранного ими подхода.
    Они уверены в том, что изучение Хаскелла способствует достижению принципиальных целей обучения:

    1. Представление элементарных методов программирования (практический аспект).
    2. Введение в важные понятия обработки информации (теоретический аспект).
    3. Вырабатывание аналитического мышления и навыков решения задач (методологический аспект).

    Облегчённый и ортогональный синтаксис Хаскелла помогает отодвинуть особенности синтаксиса на задний план и сконцентрироваться на общих концепциях программирования. Очевидно, что это помогает быстро приступить к интересным темам и задачам. Краткий синтаксис и высокая выразительность современных функциональных языков - существенное преимущество при обработке структур данных.
    ...ну и так далее в том же духе :о))...

    Кстати, там обсуждается и такая проблема обучения функциональному программированию, как несоответствие распространённых языков изученным знаниям по ФП. Такие важные составляющие ФП, как list comprehension, каррирование, функции высшего порядка и лямбда-выражения, отсутствуют в большинстве языков...

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


    <<<... | 2022—2013 | 2012—2003 | 2002—1993 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 350


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

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

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

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

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

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