Функциональное программирование в Nemerle - замечания по статье
От: FDSC Россия consp11.github.io блог
Дата: 20.05.07 13:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FDSC, Вы писали:


FDS>>Честно скажу: старался читать внимательно и прочитал даже чуть больше половины После чего у меня перегорел последний защитный предохранитель и я понял: "Влад опять рассказывает фичи Немерле по отдельности...".


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



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

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


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


VD>Наверно общим принципом является дизайнерский выбор того как решать задачу. Если выбирается подход с эмуляцией проблемы с помощью объектов и изменения их состояний, то надо использовать ОО-фичи языка которые почти 1 в 1 как в C#. Другой подход который можно предпочесть — это описание модели как набора вариантов, а их обработку как набор преобразований (конвертаций) этих данных в другие представления.



Собственно, вот здесь и было бы неплохо расшифровать применение "конвертаций" совместо с ООП. Т.е. ясно, что Nemerle не Sceme и "конвертации" будут выглядеть по другому. Соотв., хотелось бы увидеть как

Т.е. увидеть ФП не так, как его SICP показывает, а на архитектурном уровне в сочетании с ООП. Как и где ФП-решения сочетаются с ООП.Возможно, на реальных примерах даже лучше было бы, если есть нужное их количество
Опять же, Nemerle легко позволяет отход от строй константности переменных, что то же может дать изменение в стиле программирования по сравнению с традиционными ФП — опять же, было бы неплохо продемонстрировать как это делается. А то сейчас я мыслю как реле — или ФП, или ООП. В итоге в Немерле для меня полезны одни только замыкания


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


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

Т.е., фактически, нужен пример логики программиста, когда он думает о том, какой код напишет, но самого кода ещё нет

VD>Вот приведенный пример калькулятора как раз хорошо подпадает под фунициональное решение. На входе мы имеем модель одного вида (AST), а на выходе другого (вычесленное выражение и строковое предсавление). Приведенный здесь
Автор: VladD2
Дата: 16.05.07
пример оптимизации тоже подподает под понятие "конвертации".


Замечательный пример, НО только тот, который длинный, с Convert: от этого он почему-то намного понятнее становится. А просто с Eval уж больно просто Честное слово, с Convert до меня дошло почти сразу (правда не совсем точно, но дошло), как увидел, а с Eval я не понял что деется... почему, не знаю. Видать два почти одинаковых кода есть, которые делают разные вещи и поэтому их можно сравнить.

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


VD>Ну, SDK не требуется. В прочем SDK по сравнению с самой студией — это просто ничто (студия гигабайты, а SDK сто с копейками мег.).


Эээээ.... только не пугайте меня... студию-то зачем по инету скачивать? Её я скачаю разве что через пару лет (у меня Dial-Up)
Кароче говоря, как использовать интеграцию лично я не понял, и возможно ли это вообще делать с Dial-Up

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

VD>Проблема в том, что структура завист от выбираемых решений. Я демонстрирую средства и примеры решений. И тлько от конкретного программиста зависит то как он решит проблему. Уверен, что первые решения все как одно будут в ОО-стиле и на сквозь императивными. Но если стремиться улучшать свой код, то довольно быстро обучаешся исползовать функциональные возможности.


Дело в том, что не демонстрируется способ, которым вы пришли к решению

VD>По сути учиться писать фунционально можно и на C# 2.0. Только результат не всего удет выглядеть хорошо. Но это не главное. Главное научиться думать о прорамме как о серии преобразований исходных данных в конечные. Тогада все непонятные фичи вдруг сразу станут очень понятными и удобными.


Да я о ней так всегда думаю


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


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


Я без нормально описания языка программировать не очень-то могу: слишком неприятно. Проблема, в т.ч., и в том, что никогда не уверен в том, что сделает компилятор из твоего кода. Тут надо долго мучаться и всё время ходить на форум искать или спрашивать
А я очень уж не люблю чувствовать себя с компьютером неуверенно.




22.05.07 00:49: Ветка выделена из темы Функциональное программирование в Nemerle
Автор: Чистяков Влад (VladD2)
Дата: 03.03.07
— VladD2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.