LINUX.ORG.RU

Сфера применения haskell, lisp, scheme? и др. функциональщины?


0

0

Эти языки интересны и сейчас начал изучение (со scheme по sicpу), но кроме просто интереса к языку еще интересно и то, где он применяется. Какие сферы применения этих языков, реально ли применять их знание (ну и функционального подхода в целом) на практике?

Что можете посоветовать почитать на тему функционального и не только программирования?

Пока читаю sicp, в дальнейшем планы на real world haskell или yaht, Кнута. Надо бы еще дискретную математику осилить, что по ней почитать? Желательно чтобы книга была достаточно строга, т.е. освещала не только практическую ее сторону.

Ответ на: комментарий от anonymous

Продолжаю потихоньку

> Когда компьютер выполняет программу на функциональном языке, он выполняет её императивно.

> вот это утверждение не понятно. На каком уровне?

На уровне процессорных команд.

> Есть модель исполнения Тьюринга, с состояниями, и есть лямбда-исчисление (или ещё какое SK-исчисление, тысячи их). "Модель виртуальной машины с лямбда-исчислением" -- ни разу ни императивна. Модели эквивалентны, и конвертируются туда-сюда.

В математическом смысле.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

> Я указал на то, как выглядит формальная модель того, что он делает в процессе доказательства, и что модель эта ничего императивного не имеет в себе (нет там никаких разрушающих изменений состояния). Где тут оффтопик?

решаемое_нами_уравнение := "х*х-2х-3=0" ;
решаемое_нами_уравнение := "(х-1)*(х-1)-4=0" ;
решаемое_нами_уравнение := "(х-1)*(х-1)=4" ;

Разрушающие изменения состояния избегаются математиками только тогда, когда их неудобно использовать.

Еще доказательство от противного -- возможно пример р. и. с.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от klalafuda

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

Не понял (Если тебе нужно сделать значение i инвариантом цикла -- это совсем другое)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

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

> Не понял

Это шутка.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>> Но с твоей стороны вообще не было НИ ОДНОГО аргумента, кроме голословных утверждений.

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

Я признал, что был не прав. И поправился -- заменил "академические" на "теоретические". И не позволял себе голословных утверждений, иначе как в риторическом значении.

>Надо различать процесс решения задачи и формулировку самой постановки задачи.

Согласен

> В большинстве случаев человек ограничивается вторым, и конкретикой решения не интересуется. Даже когда идёт в пивнушку или делает табуретку.

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

>> А спор, скорее всего, во многом терминологический: мы не оговорили, что понимаем под термином "мышление".

> Не функциональщики начали этим термином размахивать.

Но функциональщики докопались до (совершенно несущественных) деталей и с удовольствием стали этот (офф-)топик развивать... :-)

Die-Hard ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Не понял (Если тебе нужно сделать значение i инвариантом цикла -- это совсем другое)

for (i = 0; i < 10; i++) {
    xxx();
}

это полный эквивалент

i = 0;
while (i < 10) {
    xxx();
    i = i + 1;
}

но во втором случае ни у кого, надеюсь, не вызовет какого-то
особого недоумения тот факт, что i в принципе можно не только
инкрементировать но производить над ней любые другие операции:

i = 0;
while (i < 10) {
    xxx();
    if (yyy()) {
        i = i + 1;
    } else {
        i = i - 1;
    }
}

for() - это всего лишь одна из форм записи, не более. и если человек
не видит, что за ней стоит, ему наверное ещё стоит чуток подучиться
и введение каких-то дополнительных ограничений или ветвлений этой
формы "в целях понятности" IMHO бессмысленно но лиши запутает. больше
сущностей и вариаций - больше проблем.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

> а нафига их противопоставлять? Вот парадоксальное мышление в стиле Ш. Холмса, или Г. Хауза и т.п. -- это императивное или "функциональное", системное?

ИМХО отнесение системного мышление к "функциональному" лишено смысла. Мне не интересно развивать дискуссию в этом направлении, поскольку я не согласен с основным постулатом.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

> Итак, прежде чем продолжать, надо бы согласиться по терминологии.

>Императивный подход пользуется терминами состояний и переходов между состояниями. Функциональный - мышление в терминах правил отображения одной области на другую (что покрывает и простейшие варианты мышления в терминах состояний).

Ок.

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

> Декларативный - мышление в терминах свойств и правил, то есть, обычная логика.

Это -- не мышление, а его результат. Набор элементов для последующего мышления.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

>> И почему я должен перестать повторять то, что я считаю истиной?

> Потому, что можно было бы уже ознакомиться с новыми источниками.

Почему ты решил, что я с ними не знаком? Только потому, что я с ними не согласен?

>> Я просто сказал, что _ИМХО_ мои оппоненты не владеют тем образованием и опытом, что доступны мне в рамках этого конкретного поворота дискуссии.

>В высокомерном тоне. Что в устах регистрированного пользователя всегда звучит особо оскорбительно.

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

> И что, гадание по айпишникам даёт информацию о том, кто в какой степени владеет темой?

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

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

> И что плох тот учёный, паршив тот инженер, не нужен тот программист, кто не знает всех аспектов этой общей модели ...

Спорим, что подавляющее большинство нобелевских лауреатов про эту формальную модель не знают?

> ...и не способен смотреть на задачи с разных углов.

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

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

>> Давай я сейчас приведу все известные мне математические термины и теории на этот счёт -- какое это будет иметь отношение к имманентной сущности человеческого мышления?

>Мышление тут при чём? Было сделано странное заявление о том, что доказывающий теорему математик "мыслит императивно". Я указал на то, как выглядит формальная модель того, что он делает в процессе доказательства, и что модель эта ничего императивного не имеет в себе (нет там никаких разрушающих изменений состояния). Где тут оффтопик?

Твое "указание" выглядело (дословно): anonymous (*) (21.12.2008 20:39:49):

> Математик как минимум обязан знать про соответствие стандартных тактик доказательства элементам лямбда-исчисления. Обязан был слышать про лямбда-куб, про изоморфизм Карри-Говарда, про категории. Обязан знать хотя бы основы теории доказательств.

Очевидно неверное утверждение (я знаю много математиков, ни разу про все это не слыхавших), никак на "указание на то, как выглядит формальная модель того, что он делает в процессе доказательства, и что модель эта ничего императивного не имеет в себе (нет там никаких разрушающих изменений состояния)" не тянущее ;-)

>> Лично мне оно не кажется законченной наукой,

> Ы? Где дыры? Чего не хватает?

Законченности и применимости к жизни.

> В этой науке и так на порядок больше сложностей навыдумывали, чем в реальной практике применяется.

Именно!

>> хотя бы в силу своей неоднозначности -- какова количественная мера того, что она "дала"?

> Элементарно отслеживается происхождение всех элементов науки программирования.

Ура! С мерой определились. Хоть и несколько -- э-э-э -- пафосно...

> Большая их часть торчит ушами из теории доказательств и из задачи обоснования математики. Чисто количественно.

Голословное утверждение. Пруфлинк?

> Опыт тут не нужен.

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

>> Мой опыт утверждает обратное, так что давай с этим топиком завяжем.

> У меня нет причин доверть чьему бы то ни было опыту.

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

Die-Hard ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> ...чисто практический вывод -- должны быть _2_ разных фор-а: ...

Кстати, все это хорошенько обсасывалось во времена развития структурного программирования, в основном Дийкстрой и Кнутом. Кто сейчас про это вспоминает?

Die-Hard ★★★★★
()

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

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

dilmah ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Разрушающие изменения состояния избегаются математиками только тогда, когда их неудобно использовать.

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

причем "решаемое нами уравнение" -- это только первое, а все
остальное это цепочка эквивалентных уравнений.

anonymous
()
Ответ на: комментарий от Die-Hard

>Согласно этому определению, "Функциональное мышление" -- образное, синтетическое, а "императивное мышление" -- конкретное, аналитическое

IMHO cпорная подстановка.

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

Тогда о чём спор? Декларативных "методов" оказывается, вообще нет?

DonkeyHot ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Ну молодец. Договорился до того, что Пролог - императивнейший из всех языков, постоянно разрушает переменную current_goals.

А уж если вспомнить о том, как машина Уоррена работает, про разрушающую унификацию - то и вовсе махровая императивщина лезет.

Не смешно!

anonymous
()
Ответ на: комментарий от anonymous

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

Один замечательный лектор (я не иронизирую, он лучший) имел забавную привычку - в многоэтажной формуле на доске делает какое либо тривиальное преобразование, и приговаривает - "я вот тут сотру, а вы у себя всё перепишите". Оптимизация, фигли.

anonymous
()
Ответ на: комментарий от anonymous

> foreach уже во всех популярных языках нарисовался.

причем как побочный продукт "коллекций"

dave ★★★★★
()
Ответ на: комментарий от tailgunner

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

А можно привести конкретный пример компилятора VHDL, написанного с использованием ФП?

V_L_A_D ★★
()
Ответ на: комментарий от V_L_A_D

> А можно привести конкретный пример компилятора VHDL, написанного с использованием ФП?

Нет. Просто тема использования ФЯ в разработке железа всплывает со странным постоянством - читал об этом в статьях по Хаскел, Окамл и F#.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Так исторически сложилось. Читай про HOL и его применения (тот же ARM, например).

anonymous
()
Ответ на: комментарий от anonymous

>Смотри на Xilinx Lava.

Ну про Лаву я слышал, прикольная вещь. Кстати, интересно было бы почитать о том, в каких узкоглазых компаниях она реально применяется:)

Кроме того, изначально стоял вопрос не о проектировании харда, а о его верификации (для чего Лава не предзназначена). А там все так же рулит старая добрая императивщина в лице VHDL и SystemVerilog.

V_L_A_D ★★
()
Ответ на: комментарий от dilmah

> есть мнение, что XSLT это функциональный язык..

Кстати, там нет оператора присваивания. Но есть рекурсия. Можно определять функции (именованные шаблоны).

Для себя написал код вычисления чисел Фибоначчи. На такой XSLT-код смотреть без слез нельзя. Еще оказалось, что XSLT-движок Мозилы намного лучше справляется с рекурсией, чем движок IE.

dave ★★★★★
()
Ответ на: комментарий от jtootf

Шо ты, оно только троллингом интересуется. На фига ему твои ссылки?

anonymous
()
Ответ на: комментарий от jtootf

>>Ты забыл вставить обязательную ссылку

>я могу парочку свежих подбросить. интересуешься?

Подбрасывай. Не мне, так другим пригодится :)

tailgunner ★★★★★
()
Ответ на: комментарий от jtootf

:/ А ссылок на ML-подобные нету?

>haskell:

>http://www.anygma.com/

Хотя здесь народ еще не определился с выбором - Haskell или F# :)

>erlang:

> http://massivesolutions.co.uk/

Хе-хе, это наш друг Led, не иначе %) Хотя они и не упоминают Эрланг прямо.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>:/ А ссылок на ML-подобные нету?

не. я APL-подобных знаю больше чем ML-подобных. впрочем, я ML'ем никогда особо не интересовался

>Хотя здесь народ еще не определился с выбором - Haskell или F# :)

учитывая что там работает Элиотт, выбор более-менее очевиден

>Хе-хе, это наш друг Led, не иначе %) Хотя они и не упоминают Эрланг прямо.

однако же там именно erlang

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> там именно erlang

Верю на слово :) Да и описание технологии тоже очень похоже на Эрланг.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.