Re[3]: Порядок зависимости
От: Zis  
Дата: 31.05.05 12:03
Оценка:
Здравствуйте, VsevolodC, Вы писали:

VC>Здравствуйте, adontz, Вы писали:


A>>Здравствуйте, Аноним, Вы писали:


A>>А почему бы не вычилять по требованию? То есть типа так

A>>
A>>int calculate()
A>> {
A>>  static bool is_caculated = false;
A>>  static int precalulated_result;

A>>  if (!is_calculated)
A>>  {
A>>    precalculated_result = .... /* тут и вычисляем */

A>>    is_calculated = true;
A>>  }

A>>  return precalculated_result;
A>> }
A>>

A>>Тогда

A>>1) всё вычислится в порядке учитывающем зависимости

A>>2) каждый результат будет вычисляться только 1 раз
A>>3) результаты которые в некоторой ситуации не нужны вычислены не будут
A>>4) никаких сортировок не надо, всё делается само.

VC>Это здорово, если есть уверенность в правильности исходных данных. А если там цикл?


Вот это обнаружит заодно и цикл.

    void calculate(Expression e) {
        if (inProgress[e]) throw "Circular dependency detected";
        if (e.value hasn't been calculated yet) {
            inProgress[e] = true;
            foreach dep in e.dependencies {
                calculate(dep);
            }
            inProgress[e] = false;
            e.value = e.evaluate();
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.