Три значения переменных, максимум, минимум, факт - PullRequest
3 голосов
/ 25 марта 2009

Давным-давно я разрабатывал системы, используя Egeria, экспертный язык системы. У него была действительно полезная функция, где переменные имели три значения: минимальное, максимальное и текущее. Таким образом, вероятность частично известного значения может быть рассчитана с результатами, заканчивающимися как диапазон. Я не могу вспомнить синтаксис, но это было что-то вроде этого: -

A.Min = 1;
A.Max = 5;
A.Current= 4;
B.Min = 2;
B.Max = 4;
B.Current= 4;


A * B = {2, 20, 16}

У меня такой вопрос, как называется этот подход и реализуют ли его какие-либо современные языки?

Ответы [ 4 ]

3 голосов
/ 25 марта 2009

Похоже, что в качестве "подхода" это может быть разновидностью нечеткой логики . Особенно, когда вы описываете его использование вероятностно.

3 голосов
/ 31 марта 2009

Многозначные переменные, подобные тем, которые вы описываете, могут использоваться в программировании на основе ограничений. Для недавней работы см. Радул и Суссман, «Искусство пропагандиста» .

г. Радул представлен на ILC 2009 на прошлой неделе. Он привел пример (что можно считать) многозначных переменных, которые представляют вероятностное приближение к «истине». (Заранее извиняюсь за искажение информации, у меня нет заметок.) ​​

Рассмотрим систему, которая должна согласовывать показания двух термодатчиков. Предположим далее, что показания каждого датчика имеют некоторую степень неопределенности: датчик A говорит, что температура находится между A1 и A2, датчик B говорит, что температура находится между B1 и B2. Должна ли система дать сбой при попытке вычислить температуру? Возможно, «истина» может быть выражена в терминах диапазона, в котором показания перекрываются.

1 голос
/ 31 марта 2009

В приложении C к исходному документу по Yacc (опубликованному в томе 2 Руководства программиста UNIX для версии 7; документ датирован 1978-07-31) описан «настольный калькулятор, который выполняет арифметику с плавающей запятой». Он использовал интервалы с обозначением «(min, max)» и реализовал арифметику на основе диапазона. То, что вы описываете, является расширением этого значения и с текущим значением.

0 голосов
/ 25 марта 2009

Большинство объектно-ориентированных языков могут сделать это довольно легко, используя классы.

В частности, в C ++ было бы очень легко создать шаблонный класс, который обрабатывает это для вас, например, для любого базового типа.

Я не знаю ни одного языка, который бы поддерживал это как часть основного языка.

...