A menudo necesito implementar algún tipo de sistema de reglas que sea editable por el usuario - los requisitos son generalmente lo suficientemente diferentes como para que el mismo sistema no sea directamente aplicable, por lo que con frecuencia me encuentro con el mismo problema - ¿cómo diseño un sistema de reglas que¿Buenas referencias/consejos para diseñar sistemas de reglas?
- es mantenible
- equilibra adecuadamente expresividad con la facilidad de uso
- se puede ampliar fácilmente (si/cuando me sale (2) mal).
Creo que los sistemas de reglas/DSL son extremadamente valiosos, pero no me siento cómodo con mi capacidad para diseñarlos correctamente.
¿Qué referencias/sugerencias tiene para ofrecer que pueden ayudar a hacer esto más fácil?
Debido a la naturaleza de los problemas que encuentro, los idiomas existentes generalmente no son aplicables. (Por ejemplo, podría no requerir que los usuarios de computadoras generales aprenden Python para escribir un filtro de correo electrónico). De forma similar, la regla idiomas, como JESS, son solo una solución parcial, ya que algunas necesidades de interfaz de usuario (más simples) para ser construido sobre el lenguaje de reglas para que los no programadores puedan hacer uso de él. Esta interfaz invariablemente implica eliminar algunas características, o hacer que esas características sean más difíciles de usar, y que process presenta los mismos problemas descritos anteriormente.
Editar: Para aclarar, la pregunta es sobre diseñando un motor de reglas, no estoy buscando un motor de reglas pre-construidos. Si sugiere un motor de reglas, explique cómo aborda la pregunta sobre cómo tomar buenas decisiones de diseño.
No estoy seguro de entender la aplicabilidad de los árboles de expresión. ¿Los está sugiriendo como un aspecto del intérprete de lenguaje de reglas, o los usa para representar las opciones para cada regla? Estoy un poco confundido. – rcreswick