A technique is used in embodiments of the invention such that backtracking
programs can be written in a general purpose computer language (e.g., C++
or Java) without requiring the control structure of the program to reflect
the structure of the decision tree. A data state and a control state are
restored during backtracking. For restoring the data state, embodiments of
the invention keep track of the changes made to variables and the point in
execution at which the changes are made. When backtracking occurs, the
data state can be restored by undoing the changes to the desired point in
execution. For restoring the control state, the method of the invention
provides a "failure" exception state that is invoked upon failure in the
program (e.g., a failure to find a solution in a search program). The
failure exception is "caught" by catch points established in the execution
stack. The failure exception is passed up the execution stack until a
point is reached prior to the failure at which execution should be
re-initiated. Since the control structure of the search program need not
have the same form as the decision tree, part of the control state for the
desired decision point may no longer exist on the execution stack, so the
catch point may not be directly associated with the desired point but
merely preceed it. The remaining part of the control state is restored by
re-executing the program in a special re-execution mode until the desired
state is achieved and another alternative may be chosen.
Метод использован в воплощениях вымысла такие что backtracking программы можно написать в общего назначения компьютерном языке (например, C++ или java) без требовать, что структура управления программы отразила структуру дерева решений. Положение данных и положение управления восстановлены во время backtracking. Для восстанавливать положение данных, воплощения вымысла keep track of сделанные изменения к перемеююым и пункт в исполнении на котором изменения сделаны. Когда backtracking происходит, положение данных может быть восстановлено путем расстегивать изменения к заданному пункту в исполнении. Для восстанавливать положение управления, метод вымысла обеспечивает положение исключения "отказа" которое invoked на отказе в программе (например, отказе найти разрешение в программе поиска). Исключение отказа "уловлено" пунктами задвижки установленными в стоге исполнения. Исключение отказа о вверх по стогу исполнения до тех пор пока пункт не достигнуть до отказа на исполнение должно быт6$ет-начато. В виду того что структура управления программы поиска иметь такую же форму как дерева решений, часть положения управления для заданного пункта решения может no longer не существовать на стоге исполнения, поэтому пункт задвижки не может сразу быть связан с заданным пунктом но просто предшествовать его. Остальная часть положения управления восстановлена путем re-executing программа в специальном режиме ре-ispolneni4 до тех пор пока заданное положение не достигнуть и другая алтернатива может быть выбрана.