Здравствуйте, VladD2, Вы писали:
VD>Как обычно. Сказать есть что, но тебе это не нравится.
Увы, слова про "хрень" — действительно "как обычно". И, таки так, восхищения у меня они не вызывают.
VD>match заменяет и if, и switch и даже операторы вроде && и ||. Доказательством служит то, что в Нэмерел операторы if реализован на базе match, а switch вообще отсуствует, так как проигрывает match-у в выразительности.
VD>Но это сказать это, все равно что ничего не сказать.
VD>match — это в разы большее мошьная конструкция.
VD>Конечно, все что можно сделать с помощь match можно сэмулировать сочетанием груды if-ов cо switch-ами, плюс прийдется пользоваться хэш-таблицами и писать кучу кода.
Влад, сопостовление с образцом это средство связывания данных с кодом их обрабатывающим, можно сказать средство создания контекста выполнения. Вот тебе пример из
A Gentle Introduction to Haskel:
4.1 Pattern-Matching Semantics
A successful match binds the formal parameters in the pattern.
При успешном сопоставлении (данные) связываются с формальными параметрами образца.
/.../
4.3 Case Expressions
Pattern matching provides a way to "dispatch control" based on structural properties of a value.
Сопоставлени с образцом позволяет "передавать управление" в зависимости от структуры значения.
Кроме операторов ветвления if/switch в современных языках есть другие способы как передачи управления, так и связывания кода с данными. Это, известные всем, методы объектов, где код всегда связан с нужными данными. И перегрузка методов в статически типизируемых языках.
И ежу понятно, что сопоставление с образцом более гибко, чем объекты + (виртуальные) методы, потому, что структура объектов более жесткая. Но, поскольку сказано, что пример "
наглядно демонстрирует некоторые отличия между Nemerle и C#Автор: Vermicious Knid
Дата: 20.02.06
", то, корректной была бы программа-образец в которой сравнивались методы + объекты + if/switch с сопоставлением. Использованный пример можно заимплементить даже без if (Что я и показал). Что интересно, достаточно легко выбрать задачу, которая через сопоставление решается "веселее" чем на конструировании объектов/методов/if-ов. Простейший пример — любая задача требующая множественной диспетчеризации (для примера может хватить и двойной).
А уж если сравнивать сопоставление только с if/switch, то нужно было бы взять читый C. Только сомневаюсь, что сравнение Nemerle с С добавит первому очков.
VD>Но основная проблема заключается в том, что при этой эмуляции сильно страдает выразительность.
VD>Собственно именно это и пытался продемонстрировать Vermicious Knid в обсуждаемом сообщенииАвтор: Vermicious Knid
Дата: 20.02.06
.
Проблема в том, что этой эмуляции не нужно было. У С# хватает реальной кривизны, не нужно ему приписывать еще и выдуманой.
VD>Не приймите, это за наезд или оскорбление, но вам похоже нужно просто по серьезнее изучить match и его возможности. Тогда вам будет очевидно, что match — это намного более универсальная и выразительная вещь чем switch. Ну, а if является более врыазительным в некоторых случаях, но не обеспечивает всего функционала. Куча же if-фов является явно менее выразительной.
А
мужики то и не знают, что match нужно сравнивать со switch. А они взяли и написали:
Сопоставление с образцом это способ разложения сложных структур.
И не сказали, что это способ управления потоком выполнения. Нужно написать им баг-репорт, однозначно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>