Дело в том, что в каждый модуль, где используется константа, её значение внедряется при компиляции. Иногда уже в неявном, вычисленном виде.
Например:
x := 2* MyMath.pi - компилятор возьмёт значение константы pi из модуля MyMath, умножит на 2 и в ваш модуль запишет прямо в код результат. А ссылка на константу другого модуля вставляется именно затем, чтобы отследить, если она поменялась, и потребовать от программиста перекомпиляции. Вообще, раз введённые константы менять не следует.
Если же Вам это нужно, то это по смыслу уже не константа, а то, что в других языках часто называется константной переменной.
Делается так:
Код:
MODULE Demo;
CONST
_myVal = 10;
VAR
myVal-: INTEGER;
BEGIN
myVal := _myVal
END Demo;
Практический пример: есть константы с обозначениями валют. Они неизменны, но могут появляться новые. Удобно иметь величину, которая хранит максимальную существующую константу валюты (для разных переборов).
Код:
CONST
wmz* = 101; wmr* = 102; wmb* = 103; ...
_lastWm = 103;
VAR
lastWm-: INTEGER
Тогда во внешних модулях можно спокойно, устойчиво к любому добавлению констант, перебирать:
Код:
i := Types.wmz;
WHILE i <= Types.lastWm DO
...
INC(i)
END