Я вот тут уже подметил, что разработчики AutoCAD нынче в сторону .NET смотрят.
Ну это сейчас ситуация такая что народ не хочет учить Lisp а просит .NET вот они и потакают. Это не в коем случае не говорит о том, что .NET для этого применения лучше чем Lisp. В Erricson'е тоже не все на Erlang'е пишут.
Не хочет народ учить Лиспа! Знакомый работал в конторе, занимающейся разработкой расширений автокада. У них наследие на Лиспе было, вот они плевались на него: код раздутый, все завязано на сайд-эффекты и т.п. Никто у них так и не стал учить его, благо им только логику понять да баги кое-какие пофиксить надо было, а так они на плюсах вроде писали.
PS: проблема конечно на самом деле не в Лиспе была
Я, кстати, вот о чем подумал в процессе изучения языка: при текущем развитии процессоростроения, когда уже возможны процессоры с сотней-другой ядер, на которых к тому же возможно выполнение нескольких инструкций одновременно, должен встать вопрос о том, как разрабатывать такой софт, который эффективно использует все эти вычислительные устройства. И тут, имха, на первый план должны выйти языки с "естественной" распараллеливаемостью, функциональные, например, вот такие как Haskell. Так что есть смысл освоить функциональную парадигму.
Imp, согласен по двум пунктам. У вас qsort и fibonacci и проще и нагляднее, но мне в них понравилась некая изюминка, так сказать. В случае с qsort - определение функции один в один аналогично математическому определению алгоритма. А в fibonacci - хитрая замена tail.
А по saxpy есть вопрос: правильно ли я понимаю, что ввиду ленивости Хаскеля по xs будет выполнен один проход? Но в любом случае, в моем варианте основная операция (Scalar Alpha X Plus Y) видна невооруженным глазом (хотя может быть оно и не нужно, ибо из названия это и так ясно), а в вашем случае нужно чуть повтыкать.
Цитата(Imp @ Feb 20 2010, 22:38)
let кстати только в интерпретаторе нужен
А вы думаете, откуда этот листинг?
Цитата(Imp @ Feb 20 2010, 22:38)
что в интерпретаторе все происходит в do блоке монады IO.
Imp, согласен по двум пунктам. У вас qsort и fibonacci и проще и нагляднее, но мне в них понравилась некая изюминка, так сказать. В случае с qsort - определение функции один в один аналогично математическому определению алгоритма.
Ну чтобы было соответственно математическому описанию нужно x<-xs трактовать как x∈xs. Тогда да. В принципе оно так и трактуется.
Цитата(jem @ Feb 23 2010, 12:16)
А в fibonacci - хитрая замена tail.
fibonacci@(_:fibs) - это называется pattern matching но наверно можно выбрать более наглядный пример.
Цитата(jem @ Feb 23 2010, 12:16)
А по saxpy есть вопрос: правильно ли я понимаю, что ввиду ленивости Хаскеля по xs будет выполнен один проход? Но в любом случае, в моем варианте основная операция (Scalar Alpha X Plus Y) видна невооруженным глазом (хотя может быть оно и не нужно, ибо из названия это и так ясно), а в вашем случае нужно чуть повтыкать.
Да будет в один проход. Да иногда полезно когда формула видна в коде, я просто хотел показать что не всегда нужно вводить новые имена и писать лямбды, почти всегда можно без этого обойтись. Так называемый pointfree style. А повтыкать - это вопрос привычки.
Цитата(jem @ Feb 23 2010, 12:16)
А вы думаете, откуда этот листинг?
Листинг то из интерпретатора это и так понятно, но с точки зрения Haskell как языка let не нужен.
Листинг то из интерпретатора это и так понятно, но с точки зрения Haskell как языка let не нужен.
Мне не понятно, зачем вы вообще про let заговорили. Я-то его использовал именно потому, что работал интереактивно с интерпретатором. А как он используется в скриптах, и где нужен, в любом букваре написано.
Цитата(Imp @ Feb 23 2010, 16:20)
это называется pattern matching
То же касается и сопоставления с образцом.
А "хитрую замену", кстати, если вы не поняли, следует понимать как "финт ушами".
Цитата(Imp @ Feb 23 2010, 16:20)
Так называемый pointfree style
Попробовал тулзу - на выходе такой космос получается.
Мне не понятно, зачем вы вообще про let заговорили. Я-то его использовал именно потому, что работал интереактивно с интерпретатором. А как он используется в скриптах, и где нужен, в любом букваре написано.
Просто указал что он не нужен в обычных условиях, чтобы у людей не складывалось впечатление что Haskell это как бейсик где перед обьявлениями нужно писать let. Еще в интерпретаторе вы можете написать let a=2, а потом let a=3, но без let вы такое не напишете. Так что это не просто такой необязательный элемент синтаксиса.
Цитата(jem @ Feb 24 2010, 18:58)
То же касается и сопоставления с образцом.
ну это тоже не для вас разъяснение, а для других читателей форума. Это кстати не только для Хаскелля специфичная конструкция. В python'е тоже есть pattern matching, только гораздо более примитивный.
Цитата(jem @ Feb 24 2010, 18:58)
А "хитрую замену", кстати, если вы не поняли, следует понимать как "финт ушами". Попробовал тулзу - на выходе такой космос получается.
Ну "космос" это с непривычки
Не воспринимайте, пожалуйста, мои ответы на свой счет как критику или что-то подобное, я просто пытаюсь объяснить некоторые моменты, чтобы было понятно другим читателям форума, ну возможно немного поделится опытом. Это ни в коей мере не значит что мой вариант "лучше" или "правильней", чем ваш, просто я показываю как можно написать по другому. Возможно, мой тон несколько менторский, но это у меня просто такая привычка.