2009-08-31 10 views
0

S'il y a un code source ouvert qui fait déjà cela, je suis intéressé à en entendre parler. Mais je ne l'ai pas encore vu alors j'essaie de rouler le mien.comparaison/intersection des critères de comparaison

Exemple:

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

La partie difficile pour moi est de trouver une façon élégante de comparer la compareCriteria et créer une intersection. Dans l'exemple, l'intersection entre les deux est «entre 3 et 5».

Comment est-ce que je peux implémenter ceci d'une manière «dire ne demande pas»? Notez que compareCriteria peut être complètement indépendant (par exemple startsWithLetter versus betweenNumber).

+0

Vous allez devoir affiner un peu les critères de comparaison et les domaines dont vous parlez: dans le cas général, vous rencontrez des instructions mathématiquement indécidables. –

+0

Pouvez-vous me donner un exemple d'une telle déclaration indécidable? – koen

Répondre

1

Si vous n'avez que des constantes dans vos expressions, vous devriez être à l'abri de undecidability (je pense!). Des problèmes surgissent dès que vous pouvez exprimer par ex. déclarations générales sur les entiers avec + - */(voir Peano arithmetic).

Même si vous restez dans le domaine de la décidabilité, il n'existe aucun algorithme pouvant prendre des instructions arbitraires P (x) et Q (x) et calculer une instruction R (x) équivalente à P (x) & Q (x) pour tout x, où x peut être supérieur à n'importe quel domaine (entiers, chaînes, matrices, nombres réels, nombres complexes, énoncés logiques [whoops, retour en territoire indécidable!], ...). Vous avez besoin de trucs spécifiques au domaine pour y arriver, et strictement délimité languages dans lequel P, Q et R sont formulés. Il existe des produits logiciels pour certains domaines - l'un d'eux s'appelle Mathematica ...

Essayez de revenir à l'essentiel: quel problème tentez-vous de résoudre?

1

Si vous êtes simplement intéressé par des critères simples comme moins égale ou entre sur les entiers/flotteurs, vous pouvez réécrire entre 3 et 6 comme (plus égale 3etmoins égale 6). Si vous combinez cela avec un et logique avec moins égale 5 vous pouvez utiliser l'algèbre booléenne pour obtenir (plus égale 3et (moins égale 6etmoins égale 5)) avant de simplifier la parenthèse interne à juste moins égale 5 et réécrire le résultat comme entre 3 et 5.

Questions connexes