Три переменные значения: максимальное, минимальное, фактическое
-
22-08-2019 - |
Вопрос
Давным-давно я разрабатывал системы, используя Egeria, язык экспертных систем.У него была действительно полезная функция, где переменные имели три значения: минимальное, максимальное и текущее.Таким образом, можно было бы вычислить вероятность частично известного значения, а результаты в конечном итоге были бы представлены в виде диапазона.Я не могу вспомнить синтаксис, но это было что-то вроде этого :-
A.Min = 1;
A.Max = 5;
A.Current= 4;
B.Min = 2;
B.Max = 4;
B.Current= 4;
A * B = {2, 20, 16}
Мой вопрос заключается в следующем: как называется этот подход и реализуют ли его какие-либо современные языки?
Решение
Многозначные переменные, подобные тем, которые вы описываете, могут использоваться в программировании, основанном на ограничениях.Недавнюю статью смотрите в Радуле и Сассмане, "Искусство пропагандиста".
МистерРадул выступил на ILC 2009 на прошлой неделе.Он привел пример (того, что можно было бы рассмотреть) многозначных переменных, которые представляют собой вероятностное приближение к "истине".(Заранее приношу извинения за любое искажение, у меня нет заметок.)
Рассмотрим систему, которая должна согласовывать показания двух тепловых датчиков.Предположим далее, что показания каждого датчика приходят с некоторой степенью неопределенности:датчик A говорит, что температура находится между A1 и A2, датчик B говорит, что температура находится между B1 и B2.Должен ли произойти сбой системы при попытке вычислить температуру?Возможно, "истину" можно выразить в терминах диапазона, в котором показания перекрываются.
Другие советы
Похоже, что в качестве "подхода" это может быть разновидность нечеткая логика.Особенно когда вы описываете его вероятностное использование.
Приложение C к оригинальной статье по Yacc (опубликовано в томе 2 Руководства программиста UNIX для версии 7;статья датирована 1978-07-31) описал "настольный калькулятор, который выполняет арифметику интервалов с плавающей запятой".Он использовал интервалы с обозначением "(min, max )" и реализовал арифметику, основанную на диапазоне.То, что вы описываете, также является расширением этого значения с 'current'.
Большинство объектно-ориентированных языков могли бы сделать это довольно легко, используя классы.
В C ++, в частности, было бы очень легко создать шаблонный класс, который обрабатывал бы это за вас, например, для любого базового типа.
Однако я не знаю ни одного языка, который поддерживал бы это как часть основного языка.