-
Notifications
You must be signed in to change notification settings - Fork 7
Conhecimentos adquiridos das ferramentas
Aprendizado da semântica
Durante a implementação de uma regra para "Disciplinas do mesmo período não podem estar alocadas no mesmo horário", estavamos com dificuldades por causa da semântica do drools. Após algumas tentativas e estudo da linguagem, entendemos como a mesma funciona.
Antes estávamos inserindo a seguinte sentença para a regra supracitada:
Alocacao($d: disciplina, $h : horario)
Alocacao(disciplina != $d, horario == $h)
A sentaça acima tinha o intuito de verificar se existe 2 disciplinas distintas com o mesmo horário. Porém, tal sentença não garante que todas as possibilidades de Alocacao serão testadas. Ao invés dessa sentença, inserimos a seguinte sentença:
$alocacoes: Alocacao()
Alocacao($d: disciplina, $h : horario)
exists ( Alocacao(disciplina != $d, horario == $h) from $alocacoes )
Essa nova sentença gera um conjunto de tentativas em $alocacoes e tenta fazer matches um a um para verificar se existem duas disciplinas em um mesmo horário. Isso é explicado na documentação do Drools conforme abaixo:
Previous examples were evaluations using a single pattern. The CE from also support object sources that return a collection of objects. In that case, from will iterate over all objects in the collection and try to match each of them individually. (JBOSS.ORG, Chapter 8. Rule Language Reference)