Se olharmos para os manuais (talvez mais antigos) de Drools ou alguns outros mecanismos de regras, uma das ilustrações de seu valor agregado é resolver quebra-cabeças, como o quebra-cabeça Miss Manners (manual de Drools). Agora, esses quebra-cabeças são naturalmente formulados e resolvidos usando o Prolog ou as linguagens de programação de restrições mais recentes, e nos perguntamos por que alguém usaria o Drools para esse fim. O valor agregado que o Prolog e a CPL dão nesse caso é a capacidade de formular naturalmente o quebra-cabeça como um conjunto de predicados lógicos e pesquisar automaticamente o espaço das soluções (com a CPL sendo mais eficiente nesse sentido). Mas qual é o valor agregado de um produto como o Drools (quero dizer, além dos sinos e assobios de pegar, por exemplo, um arquivo do Excel e traduzi-lo em um conjunto de regras)?
Mais especificamente, o Prolog implementa a pesquisa de retorno, o CLP implementa a pesquisa de retorno com propagação de restrições e, portanto, em vez de pesquisar, por assim dizer, todo o produto cartesiano de espaços para variáveis individuais, eles eliminam grandes porções do espaço do produto. É isso que os torna eficazes e úteis. O Prolog e o CLP são amplamente discutidos na literatura.
Por outro lado, embora seja claro que o algoritmo Rete armazena em cache o conjunto de regras na forma de algumas estruturas de dados, tornando-o mais eficaz para avaliar a saída se algumas das entradas tiverem sido alteradas (pelo que entendi). e dando meios para atualizar efetivamente essa estrutura de dados para mudanças incrementais, é difícil (para mim) entender a idéia básica e, mais ainda, sua eficácia (em comparação com o que? Prolog? CLP)? Infelizmente, é difícil encontrar boas referências que visualizem o algoritmo Rete nesse contexto mais amplo.
Infelizmente, a documentação do Drools não é muito informativa a esse respeito. O máximo que pude encontrar foi "O algoritmo Rete, o algoritmo Leaps e seus descendentes, como o Reteoo (e o Leaps) da Drools, fornecem maneiras muito eficientes de corresponder padrões de regra aos dados do objeto do seu domínio. Eles são especialmente eficientes quando você tem conjuntos de dados que não mude completamente (como o mecanismo de regras pode se lembrar de correspondências anteriores). Esses algoritmos são comprovados em batalha ". Muito eficiente - comparado com o que? Provado em batalhas - poderia apontar para aplicativos do mundo real?
Eu apreciaria se alguém pudesse lançar um pouco mais de luz sobre esse assunto ou fornecer uma referência válida.