Diciamo che ho molte funzioni e ogni funzione accetta una lista non ordinata (l'ordine non ha importanza). Per ogni funzione voglio vedere se questo elenco è valido in base a determinate regole (una knowledgebase che ha le regole per l'elenco di ciascuna funzione).
Ciascuno di questi elenchi è al centro di una combinazione, giusto? E ogni combinazione può essere:
- accettabile
- Non valido a causa di un determinato elemento che non è accettabile
- Non valido a causa di alcune combinazioni non accettabili (diciamo che permetto [1, 2] e [1, 3] ma [2, 3] non è accettabile)
Sto cercando di trovare un modo per:
-
Ogni set di regole / possibilità in una base di conoscenza, che può essere aggiornato ogni volta che voglio (magari leggendo da un file? In realtà preferirei una DSL per scrivere le regole, se possibile) e può essere caricato a avvio
-
Un modo per convalidare queste regole / possibilità in modo intelligente ed elegante e non ricorrere a nidificato se altro e così.
Esempio
fun_1([a, b, c]) :
check_knowledgebase([a, b, c]) # => valid
fun_1([a, b, d]):
check_knowledgebase([a, b, d]) # => element d is invalid
fun_1([a, c, d]):
check_knowledgebase([a, c, d]) # => combining c with d is invalid
Ci stavo pensando, ma non so quale tipo di teoria o algoritmi dovrei esaminare per questo. Ho pensato a Rule Engine, ma implementarne uno richiederebbe troppo tempo per qualcosa di così piccolo?
EDIT: Non sto cercando esattamente una soluzione specifica per la lingua, voglio una soluzione che sia essenzialmente indipendente dal linguaggio.