// пример реализации процедуры определения пересечения двух множеств // // // A, B - два множества Iterator (Set set) : (Set set, int pos) next(Iterator Set i): action of Iterator{ pos++; return i; } written El_Type x = Iterator/Set/El_Type i : substitution{ x = i.pos; } A overtake B: action of Iterator { elB = current (B); //эта команда может превратиться просто в использование elA из вызывающей функции, используя аннотацию context или bag repeat-post elA elB) elB = B overtake A; else elA = A overake B; if (elA == elB) put(RESULT-SET, elA); return RESULT-SET } // repeat - бесконечный повтор? // repeat-pre - повтор с предусловием, repeat-post - повтор с постусловием Работа с Map: Пример отображения(view), пример №1: Map/(KEY, VALUE): type = [(KEY, VALUE)]; Map-T ([KEY], [VALUE]): view, pairs: Map/(KEY, VALUE) = { keys = map pairs, pair (key, ) = pair; key values = map pairs, pair (, value) = pair; value return (keys, values) } //(SELECT key, SELECT value) - возможно ли в функцию передавать названия поля, с кот. ей нужно работать.. ? Пример №2 (свести к поиску 6): find6: function = { x: [int] = [1, 2, 3, 4, 5, 6, 7]; //эффективная инициализация! y = map x, el 2 * el return exists(x, 12); } /** * Построить: * сортировка :- необходимо ordered-list(linked-list, tree-list) * RA доступ :- желательно hash-list или желательно tree-list * последовательный доступ :- желательно ordered-list * * Necessarily and ◇ for Possibly