2016-03-02 2 views
2

Где-то существуют языки программирования с автоматически обновляемыми переменными. Например:Языки с автоматически обновляемыми переменными

a = 100 
b = a * 3 + 1 // 301 
c = sin(b) + a // 99.1428 

После изменения «а»: а = 105, соответствующие переменные автоматически пересчитывается:

b: 316 
c: 104.3053 

Если такие языки существуют, какие подходы используются для реализации такого поведения?

+1

Excel просто делает это. Я предполагаю, что они устанавливают граф зависимостей при разборе выражений. Вы можете проверить, что круговые ссылки обнаружены. –

ответ

2

Что вы хотите, так это отложить оценку. Это распространено в приложениях для работы с электронными таблицами. Я думаю, что R-язык также позволяет что-то подобное.

Вы можете реализовать его практически на любом языке.

Обычный подход заключается в том, что вы определяете класс терминатора (например, Number) и переопределяете операторы (если язык поддерживает его, например, C++, C# или python), чтобы возвращать узлы в дереве. Таким образом, a * 3 + 1 будет эквивалентен чему-то вроде (b = Sum (Mult (a, Number (3)), Number (1)). После того, как у вас есть что-то подобное, вы можете изменить значение a с помощью accessor и затем запросите переоценку верхнего узла, который даст вам нужное значение.

Есть, вероятно, уже несколько вариантов реализации. Его нетрудно реализовать, но это немного утомительно для определения всех классов и требуются неявные преобразования. Это сложнее, если вы хотите оптимизировать оценку.

2

Возможно, вы захотите взглянуть на Functional Reactive Programming в целом и Elm, в частности, которые обеспечивают такой тип вычислений в функциональной среде программирования.

Смежные вопросы