LINUX.ORG.RU

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


0

0

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

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

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

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

> Для таких придумали запись "x := x + 1"

Она ровно так же неинтуитивна и непонятна. Поскольку понятие "переменная" тут ничего общего с алгеброй не имеет.

> Что такое "язык Excel"? VBA - трижды насквозь императивный.

На VBA пишет горстка гиков. Остальные пишут простые формулки в клеточках, чисто декларативно.

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

> На VBA пишет горстка гиков.

Ха, если бы.

> Остальные пишут простые формулки в клеточках, чисто декларативно.

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

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

> Ха, если бы.

В сравнении с общим количеством пользователей Excel - таки горстка. Жалкая.

> Паанятно. Тогда самый распространенный "функциональный язык" - это вообще формулы школной математики.

Да. А что тут такого неожиданного? Это таки функциональный язык. И он таки интуитивно понятен, куда как понятнее императивных алгоритмов. Люди мыслят декларативно, это факт. Ты не думаешь "левой-правой-левой-правой", ты думаешь "пойду ка я в пивнушку".

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

>>Тогда самый распространенный "функциональный язык" - это вообще формулы школной математики.

> Да. А что тут такого неожиданного? Это таки функциональный язык.

Да никто и не спорит. Только всё это не имеет отношения к программированию, о котором топик.

> Люди мыслят декларативно, это факт.

Люди мыслят и императивно тоже, это факт.

> Ты не думаешь "левой-правой-левой-правой", ты думаешь "пойду ка я в пивнушку".

Я думаю "пойду по Абрикосовой, сверну на Виноградную" (c)

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

> Да никто и не спорит. Только всё это не имеет отношения к программированию, о котором топик.

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

> Люди мыслят и императивно тоже, это факт.

Редко, и прикладывают к этому сознательные усилия.

> Я думаю "пойду по Абрикосовой, сверну на Виноградную" (c)

В любимую пивнушку ноги обычно сами несут. Думать вообще не надо, достаточно подумать о мотивации, и ты уже там.

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

>>Только всё это не имеет отношения к программированию, о котором топик.

>Вот от того, что ты не понимаешь, какое это имеет отношение к программированию

Я понимаю, какое отношение математика имеет к программировани. Я так же понимаю, что математика не является программированием.

> ты так до сих пор со скрипом "вяло осваиваешь ocaml", без шансов когда либо освоить.

Я его вяло осваиваю потому, что шансов применить его на практике почти нет (ага, я оптимист).

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

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

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

> Я понимаю, какое отношение математика имеет к программировани. Я так же понимаю, что математика не является программированием.

Ты ничего не понимаешь, но это уже давно было понятно.

> Я его вяло осваиваю потому, что шансов применить его на практике почти нет (ага, я оптимист).

У тебя может и нет. А другие давно и успешно применяют. И его, и F#.

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

>> Я его вяло осваиваю потому, что шансов применить его на практике почти нет (ага, я оптимист).

> У тебя может и нет.

Я про себя и говорю.

> А другие давно и успешно применяют. И его, и F#.

Ты забыл вставить обязательную ссылку: http://www.janestreet.com

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

> Если речь про лябмда-исчисление, то оно тождественно машине Тьюринга, ... оно гораздо человечнее и понятнее, и лучше подходит для анализа.

Согласен. Не всегда, но чаще всего оно удобнее.

>> Но и человек, и компьютер "мыслят" императивно.

> Это не так.

Это так :)

> Большинство студентов впадает в ступор от записи "x = x + 1". Потому что знают, что у этого уравнения нет решений. И очень сильная ломка ума требуется для осознания того, что это "разрушающее присвоение".

Во-первых, как уже было тут сказано, это -- чисто синтаксические проблемы.

Во-вторых, это -- одна из легенд, придуманных фанатами-функциональшиками, она не соответствует действительности. Нам в 8 классе на уроках профориентации фортран рассказывали, и ни малейших проблем ни у кого "x = x + 1" не вызвало.

> Чисто функциональным языком Excel пользуется гораздо больше людей...

Разумеется, для вычисления функций функциональный язык оправдан. Только там это не язык: малейшее движение в сторону оно уже не тянет -- требует императивного Васика.

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

>>> Люди мыслят декларативно, это факт.

>> Люди мыслят и императивно тоже, это факт.

> Редко, и прикладывают к этому сознательные усилия.

1. "Декларативный" и "функциональный" -- совершенно разные понятия.

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

3. Математики рассуждают абсолютно императивно. И школьные формулы тоже императивны, ибо не образуют они язык, язык там -- естественный язык той местности, где расположена школа. С подобной логикой и Це -- функциональный, поскольку там постоянно вызов функций делается.

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

> 2. Плотник, когда избу рубит, понимает свой труд как процесс последовательных простых действий. Когда он говорит ученику, что надо сделать, он так и говорит: "Сделай так-то и так-то". Люди мыслят императивно, это ИМХО очевидный факт, и я не хочу его обсуждать.

Когда плотник строгает, он мыслит императивно, ибо он знает алгоритм последовательных действий.

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

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

>Плотник, когда избу рубит, понимает свой труд как процесс последовательных простых действий

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

DonkeyHot ★★★★★
()

> Какие сферы применения этих языков, реально ли применять их знание (ну и функционального подхода в целом) на практике?

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

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

> Во-первых, как уже было тут сказано, это -- чисто синтаксические проблемы.

Нет. Используется слово "переменная". Некорректно используется. Альтернативного названия не придумали.

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

Это МОЯ практика. Школьники и студенты - все тупят.

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

> Люди мыслят императивно, это ИМХО очевидный факт, и я не хочу его обсуждать.

Паршив тот "учёный", который позволяет себе подобные высказывания.

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

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

Можешь плюнуть мне в лицо (все равно сквозь монитор не пролетит) ;). Это -- императивный процесс.

Когда математик доказывает теорему, это -- императивный процесс.

Если мы договоримся разделять "образное" и "конкретное" мышление, то С БОЛЬШОЙ НАТЯЖКОЙ можно назвать образное мышление "декларативным" и противопоставить его конкретному - "императивному" мышлению.

"Функционального" мышления не существует по определению.

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

:-)

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

>> Люди мыслят императивно, это ИМХО очевидный факт, и я не хочу его обсуждать.

> Паршив тот "учёный", который позволяет себе подобные высказывания.

Погорячился, признаЮ...

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

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

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

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

> Когда математик доказывает теорему, это -- императивный процесс.

Нда... У тебя и раньше то была каша в голове, но ты это умудрялся скрывать. Теперь же всё стало ясно.

> "Функционального" мышления не существует по определению.

Как и "императивного".

> Мужики, вы пытаетесь рассуждать в рамках категорий, вам недоступных.

Попридержал бы язычок, а?

> Не надо спорить с математиком о том, как он теоремы доказывает...

Математик лямбду "альфой" не обзовёт.

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

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

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

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

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

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

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

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

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

> Когда математик доказывает теорему, это -- императивный процесс.

не согласен.

> С БОЛЬШОЙ НАТЯЖКОЙ можно назвать образное мышление "декларативным" и противопоставить его конкретному - "императивному" мышлению.

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

> Не надо спорить с математиком о том, как он теоремы доказывает...

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

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

+1! Человек не мыслит конкретно, в терминах процессов. Человек мыслит формулировками проблем и свойствами сущностей, потребных для решения или уточнения формулировки. Переводить это в конкретный процесс - сложно и больно.

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

> когда мышление, например, бухгалтера, называют "императивным"

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

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

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

> Это МОЯ практика. Школьники и студенты - все тупят.

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

Повторяю -- на моей практике такого ни разу не случалось. Просто учителя приговаривают "дети, это -- НЕ уравнение, а оператор присваивания", и у детей вопросов не возникает. Но если преподаватель пускается в рассуждения о неподвижной точке -- да, его, как правило, не понимают...

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

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

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

Да? "Люди мыслят декларативно, это факт", http://www.linux.org.ru/jump-message.jsp?msgid=3344726&cid=3346118

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

> Математик лямбду "альфой" не обзовёт.

:-) Опечатка! Но ты ж меня правильно понял.

>> Когда математик доказывает теорему, это -- императивный процесс.

>Нда... У тебя и раньше то была каша в голове, но ты это умудрялся скрывать. Теперь же всё стало ясно.

А я всегда говорю то, что думаю, и за свои слова отвечаю.

> Попридержал бы язычок, а?

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

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

ИМХО оффтопик.

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

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

А я не функциональщик. Вырос на Фортране и Бейсике, пишу всю жизнь на Лиспе (CL, в котором функциональности с гулькин нос). Разрабатываю компиляторы, так что мыслю часто вообще в ассемблерных категориях. Однако - не получается объяснить. И у учебников классических, того же Вирта, не получается.

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

Боюсь, в сторону повёрнуты мозги именно у мейнстрим-программистов. Не секрет, что именно среди компьютерщиков собралось наибольшее количество аутеников, людей с разной степенью синдрома Аспергера. Им, двинутым, проще мыслить мелкими детальками, и они не способны, как нормальные люди, видеть большую картину. Но это отклонение.

> Просто учителя приговаривают "дети, это -- НЕ уравнение, а оператор присваивания", и у детей вопросов не возникает.

Уверен, понимания точно так же не возникает.

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

> А я всегда говорю то, что думаю, и за свои слова отвечаю.

Но надо же в процессе думанья развиваться. А повторять одно и то же, упёрто - это как-то не комильфо.

> Ты меня ставишь в неудобное положение.

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

> ИМХО оффтопик.

Ни разу. Теория доказательств - очень строгая, красивая и интересная наука. И она дала программированию больше, чем все Вирты с Дийкстрами вместе взятые.

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

> Человек не мыслит конкретно, в терминах процессов. Человек мыслит формулировками проблем и свойствами сущностей, потребных для решения или уточнения формулировки. Переводить это в конкретный процесс - сложно и больно.

:-)

Это И ЕСТЬ конкретный процесс!

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

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

> Это И ЕСТЬ конкретный процесс!

Нет.

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

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

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

Пусть аутеники выполняют за компьютеры их работу. "Мы считали" (c) Человек Дождя.

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

> Это И ЕСТЬ конкретный процесс!

процесс то есть, да. Вопрос в том, эффективно он переводится в пригодный для выполнения вид или нет. Не секрет, что можно написать парсер на прологе (и иметь постоянный backtracking), но можно и написать в стиле packrat за линейное время.
Я лично сомневаюсь, что "доказательства теорем" и прочие вещи, расчитанные на понимание решаются backtracking'ом. Штуки вроде человеческого инсайта -- это системные (метасистемные?) проявления, которые не сводятся эффективно к императивщине, backtracking'у итп.

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

Кстати, наиболее общая модель вычислений - это представление о term rewrite systems. И лямбда, и машина Тьюринга, и Марков - всего лишь примитивные частные случаи таких систем.

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

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

> Однако - не получается объяснить

Ну, а у меня -- получается...

> Боюсь, в сторону повёрнуты мозги именно у мейнстрим-программистов. Не секрет, что именно среди компьютерщиков собралось наибольшее количество аутеников, людей с разной степенью синдрома Аспергера. Им, двинутым, проще мыслить мелкими детальками, и они не способны, как нормальные люди, видеть большую картину. Но это отклонение.

Согласен. Но это удел ВСЕХ программистов, в том числе и функциональщиков, мейнстрим тут ни при чем.

>> Просто учителя приговаривают "дети, это -- НЕ уравнение, а оператор присваивания", и у детей вопросов не возникает.

>Уверен, понимания точно так же не возникает.

В моём классе возникло. И у всех, кому я это объяснял, возникло.

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

> А повторять одно и то же, упёрто - это как-то не комильфо.

А я, кстати, обычно все свои слова аргументирую (в отличие от некоторых :-) ). И почему я должен перестать повторять то, что я считаю истиной? Только потому, что мой оппонент сотню раз проговорил мантру "ты -- дурак!"?

> Просто реагирую на огульное оскорбление всех читателей темы.

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

> Не хорошо так, регистратским своим авторитетом размахивать.

Не "регистратским", а модераторским. Мне как модератору доступен твой ИПшник, но согласно правилам ЛОРа я не имею права даже намекать на ту информацию, которую я могу получить на основании этого знания.

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

> Согласен. Но это удел ВСЕХ программистов, в том числе и функциональщиков, мейнстрим тут ни при чем.

Не уверен. Меня точно нельзя к аутеникам отнести, и у меня, как у нормальных людей, проблемы с детализацией. Я мыслю постановками задач, а не их решениями. Решения даются потом и кровью.

> В моём классе возникло. И у всех, кому я это объяснял, возникло.

Это не так просто проверить. Многие будут тупо воспроизводить ритуал, по принципу copy&paste, но не понимать, что реально происходит. Хороший способ - подсунуть цикл вида for(i=0;i<n;i++) { if(что-то) i+=2;}

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

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

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

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

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

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

> Мне как модератору доступен твой ИПшник

И что, гадание по айпишникам даёт информацию о том, кто в какой степени владеет темой? Нельзя так огульно списывать непонятное мнение на "безграмотность", стоило бы попытаться разобраться.

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

> И человек, в общем-то, в большинстве случаев мыслит именно так, шаблонами поведения.

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

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

>> ИМХО оффтопик.

> Ни разу....

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

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

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

Утверждение это, очевидно, недоказуемо (хотя бы в силу своей неоднозначности -- какова количественная мера того, что она "дала"?), и основано на твоем экситенциальном опыте. Мой опыт утверждает обратное, так что давай с этим топиком завяжем.

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

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

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

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

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

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

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

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

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

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

Ы? Где дыры? Чего не хватает? В этой науке и так на порядок больше сложностей навыдумывали, чем в реальной практике применяется.

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

Элементарно отслеживается происхождение всех элементов науки программирования. Большая их часть торчит ушами из теории доказательств и из задачи обоснования математики. Чисто количественно. Опыт тут не нужен.

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

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

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

>> Согласен. Но это удел ВСЕХ программистов, в том числе и функциональщиков, мейнстрим тут ни при чем.

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

Верю! Именно поэтому тебе нельзя навязывать свою точку зрения -- у большинства программёров проблемы "с другой стороны", они просто тебя не понимают. Но, поверь, математики обычно вынуждены мыслить "с обеих сторон".

> Если поймут, что индекс цикла меняется иногда, то значит поняли суть.

Мы говорили про оператор присваивания.

> ...и мыслят они как "для всех элементов множества сделать то-то", то есть, декларативно мыслят.

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

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

Интересный спор, позже (завтра?) продолжим -- я вынужден отлучиться...

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

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

так и запишем -- императивщина для аутистов, функциональщина -- для шизофреников :-)))

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

> for(i=0;i<n;i++) { if(что-то) i+=2;}

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

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

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

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

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

// wbr

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