Действительно интересно, если со статической типизацией все понятно, то вот насчет "сайд эффектов" не очень... Я так понимаю, что именно из-за них Лисп иногда называют не совсем функциональным языком. Действительно ли избавление от них дает огромные бонусы?
PS. Правда синтаксис Хаскелла мне больше нравится, чем Лиспа. Он, как бы, "чище"...
Здравствуйте, Plague, Вы писали:
P>Здравствуйте, Tonal-, Вы писали:
T>>http://www.lisperati.com/landoflisp/panel01.html
P>Действительно интересно, если со статической типизацией все понятно, то вот насчет "сайд эффектов" не очень... Я так понимаю, что именно из-за них Лисп иногда называют не совсем функциональным языком. Действительно ли избавление от них дает огромные бонусы?
И да и нет
Ибо получается, что рассматривается "абстрактный код в вакууме", для конкретной задачи же может быть удобен какой-то свой язык (или DSL).
А полностью избавиться от сайдэффектов невозможно в принципе, ибо это получится пресловутый "неуловимый Джо", ну нафига нужна программа, в которой нет ввода/вывода?
Плюс я бы ещё сюда добавил субъективную составляющую (ты же вот сказал, что синтаксис Хаскеля тебе больше нравится ), которая играет довольно большую роль.
This comic is offensive to Haskell and must be taken down. I have started a petition to remove the insulting comic and I hope you will support freedom by signing it.
D>This comic is offensive to Haskell and must be taken down. I have started a petition to remove the insulting comic and I hope you will support freedom by signing it.
Здравствуйте, Курилка, Вы писали:
К>И да и нет К>Ибо получается, что рассматривается "абстрактный код в вакууме", для конкретной задачи же может быть удобен какой-то свой язык (или DSL). К>А полностью избавиться от сайдэффектов невозможно в принципе, ибо это получится пресловутый "неуловимый Джо", ну нафига нужна программа, в которой нет ввода/вывода?
В том то и вопрос, на сколько удобоно/быстро/хорошо выносить всю работу с вводом-выводом, т.е. делать код "чистым" или делать как обычно.
Возможно, после практики программирования на не языках ФП, мне сложно поставить во главу угла весь ввод-вывод, но возникает стойкое ощущение, что добавление какого-нибудь еще способа получить/записать данные (будь то файл/сеть/мышь и возможно звук/видео) становится несколько сложнее. Если в обычных программах некоторые вещи делаются непосредственно во время расчетов (или около того), то в Хаскелле приходится собирать всю мега-струтуру состояния и по ее результатам делать ввод-вывод... т.к. большинство вещей так или иначе взаимосвязанно... К>Плюс я бы ещё сюда добавил субъективную составляющую (ты же вот сказал, что синтаксис Хаскеля тебе больше нравится ), которая играет довольно большую роль.
Ну, мне в этом Хаскелл понравился больше даже чем Scheme (как там "Ским" или "Схема" называть??), которая поприятней и по проще синтаксиса старичка Лиспа. Мне больше нравится статическая типизация, чтоб не думать об ошибках исполнения, а если что чтоб компилятор ругался. но это все не относится к беспокоящему меня вопросу про чистоту языка...
Вобщем (возможно кажущаяся) проблема в том, что либо программа будет строить мега структуру состояния, которую будет обрабатывать блок ввода-вывода (т.е. цикл: ввод-обработка-вывод), из-за чего получится сложно-сочиненная связь между вводом-выводом и чистым кодом обрабатывающие и запихивающие все в мега-структуру... этакий подход "в глубину"... В некоторых особо извратных случаях так и получится, когда различного ввода-вывода слишком много и он непрост, например в играх...
Если же разбить обработку на несколько кусков, соответственно, состояний (например, когда между большим циклом программы приходится обращаться к железу, к примеру, для аппаратного расчета каких-то вещей, напр. физики, ее последущей "доработки" и т.п.) т.е. программа начнет как-то некрасиво размазываться в длинну и напоминать императивную программу... не говоря уже о том, что интуитивно понятный цикл в погоне за хвостовой рекурсией начинает превращатся в набор (если сложная программа, думаю, выльется в несколько десятков) как-бы не связанных между собой функций, а значит в разы возрастет сложность программы...
Безусловно, многое придет с опытом , но хотелось бы услышать как делают гуру ) ведь если знание нельзя выразить, то значит это не знание, а всего лишь догадки
Здравствуйте, Plague, Вы писали:
P>Безусловно, многое придет с опытом , но хотелось бы услышать как делают гуру ) ведь если знание нельзя выразить, то значит это не знание, а всего лишь догадки
Да все они шаманы по сути
Правда пусть за это они сами отдуваются
Курилка,
К>А полностью избавиться от сайдэффектов невозможно в принципе, ибо это получится пресловутый "неуловимый Джо", ну нафига нужна программа, в которой нет ввода/вывода?
В Хаскеле не избавляются от сайд-эффектов, а помечают, классифицируют и изолируют их. Примерно, как биологи с микробами.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Курилка,
К>>А полностью избавиться от сайдэффектов невозможно в принципе, ибо это получится пресловутый "неуловимый Джо", ну нафига нужна программа, в которой нет ввода/вывода?
LCR>В Хаскеле не избавляются от сайд-эффектов, а помечают, классифицируют и изолируют их. Примерно, как биологи с микробами.
Вопрос только, что сложней — классифицировать и изолировать, или же учитывать
D>This comic is offensive to Haskell and must be taken down. I have started a petition to remove the insulting comic and I hope you will support freedom by signing it.
В свою очередь улыбнули комменты в c.l.l:
Nah. At least Haskell doesn't kill cats!
Neat magic trick -- mesmerizes the audience and makes a big chunk of the morning disappear...
Курилка,
LCR>>В Хаскеле не избавляются от сайд-эффектов, а помечают, классифицируют и изолируют их. Примерно, как биологи с микробами.
К>Вопрос только, что сложней — классифицировать и изолировать, или же учитывать
А их много? Они разбегаются? Если да, то первое однозначно
Народ! Ну скажите что-нить на мой пост.
Т.к. мне совсем не понятно как при всем удобстве и лаконичности чистого программирования грамотно структурировать "не чистую" часть?
Здравствуйте, Plague, Вы писали:
P>Народ! Ну скажите что-нить на мой пост. P>Т.к. мне совсем не понятно как при всем удобстве и лаконичности чистого программирования грамотно структурировать "не чистую" часть?
Я, конечно, не гуру, но мне из Вашего поста совершенно непонятно, в чём проблема, о которой Вы говоите.
Можете описать её конкретнее? На примере?