Сергей Губанов wrote:
> С другой стороны в оберонах есть элементарный тип "множество", которого нет в Си/Си++/Java/C#, а в языке Си даже нет булевского типа. А выразительность значит меньше. Опять странно...
>
> Кстати про множества, а почему элементарный тип bool в языки C++/Java/C# все-таки ввели, а элементарный тип "множество" проигнорировали?
Не такой уж он элементарный. В С++ есть куча шаблонов множеств для разных сценариев использования: std::bitset, boost::dynamic_bitset, std::vector<bool>, std::set и до кучи std::multiset — множество с повторениями.
> Как интересно в Си/Си++/Java/C# работают с битами? Наверное там битовые операции применяют прямо к числам?
По всякому. Иногда действительно битовыми операциями с числами, иногда с bitset, иногда с bit fields.
> Вот несчастные программисты, как они там мучаются — ведь в Си/Си++/Java/C# множество битов и числа — это одно и тоже, хотя спроси любого математика так он ответит, что число — это одна математическая абстракция (теория чисел), а множество — совсем другая (теория множеств).
>
> > VAR s1, s2, s3: SET;
Эээ, а что, в Обероне множества не типизированы?
> n, m: INTEGER;
> BEGIN
> s1 := {0,1,2,3}; (* Первые четыре бита = 1, остальные 32-4 = 28 битов равны 0 *)
> s2 := s1;
> n := 13;
> m := 2;
> INCL(s2, n); (* n-тый бит теперь равен 1 *)
Эээ, а если написать INCL(s2, 4000000000), то будет поднят бит № четыре миллиарда?
> EXCL(s2, m); (* m-тый бит теперь равен 0 *)
> s3 := s1 + s2 + {25, 26}; (* Объединение трех множеств. В объединеном множестве присутсвуют все элементы присутсвующие во всех объединяемых множествах *)
> s3 := s1 * s2; (* Пересечение множеств - остаются только элементы присутсвующие и в первом и во втором множестве *)
> s3 := s1 - s2; (* Разность множеств. Из вычистаемого множества удаляются элементы присутсвующие в вычитаемом множестве *)
> s3 := s1 / s2; (* Симметричная разность множеств. Объединение разностей множеств s1 / s2 = (s1 - s2) + (s2 - s1) *)
> m := ORD(s3); (* Sum i IN s3: 2^i *)
> s1 := BITS(n); (* {i | ODD(n DIV 2^i)} *)
>
Posted via RSDN NNTP Server 1.9
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн