2009-08-31 6 views
0

Если есть какой-либо открытый исходный код, который делает это уже, мне интересно узнать об этом. Но я еще не видел этого, поэтому я стараюсь сворачивать сам.сравнение/пересечение критериев сравнения

Пример:

variable x = compareCriteriaBetween 3 and 6 
variable y = compareCriteriaLesserThanOrEqual 5 

Трудная часть для меня найти изящный способ сравнить compareCriteria и создать пересечение. В этом примере пересечение между двумя означает «между 3 и 5».

Как я могу реализовать это в манере «Сообщить не спрашивать»? Обратите внимание, что compareCriteria может быть полностью несвязанным (например, startWithLetter по сравнению с NumberNumber).

+0

Вам придется немного сузить его, какие критерии и домены вы говорите: в общем случае вы сталкиваетесь с математически неразрешимыми утверждениями. –

+0

Можете ли вы привести мне пример такого неразрешимого заявления? – koen

ответ

1

Если у вас есть только константы в ваших выражениях, вы должны быть в безопасности от undecidability (я думаю!). Проблемы возникают, как только вы можете выразить, например. общие утверждения о целых числах с + - */(см. Peano arithmetic).

Даже если вы остаетесь в пределах разрешимости, не существует алгоритма, который может принимать произвольные утверждения P (x) и Q (x) и вычислять оператор R (x), эквивалентный P (x) & Q (x) для всех x, где x может находиться в диапазоне от любой домен (целые числа, строки, матрицы, действительные числа, комплексные числа, логические утверждения [кричит, обратно на неразрешимую территорию!], ...). Вам нужны специальные трюки для домена, и они строго ограничены languages, в которых формулируются P, Q и R. Существуют программные продукты для определенных доменов - одна из них называется Mathematica ...

Попытайтесь вернуться к основам: какую проблему вы пытаетесь решить?

1

Если вы просто заинтересованы в простых критериях, как менее равной или между на целых/поплавки, вы можете переписать между 3 и 6, как (больше равно 3именее равны 6). Если объединить это с логической и с менее равной 5 вы можете использовать булеву алгебру, чтобы получить (больше равно 3и (менее равны 6именее равны 5)) до упрощения внутренняя скобка только не равна 5 и переписывает результат как между 3 и 5.