intersection.li2
No OneTemporary

File Metadata

Created
Sun, Apr 19, 1:04 AM

intersection.li2

// пример реализации процедуры определения пересечения двух множеств
//
//
// 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
elA = next(A);
return elA;
}
intersect(Set A, B) : function, return Set = {
A, B : sorted
Set RESULT-SET;
with Iterator
repeat
elA = next(A); // при первом вызове указывает на первый элемент
elB = next(B);
if (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

Event Timeline