Constraint Handling Rules
Regras de Manipulação de Restrições (CHR) é uma linguagem de programação lógica pura de restrição desenvolvida por Thom Frühwirth na Universidade de Koblenz-Landau, na Alemanha.
Baseia-se na ideia de programação lógica de restrição, que prolonga a programação lógica com resolução de restrições. Na CHR, as restrições são cidadãos de primeira classe e podem ser manipuladas como quaisquer outras estruturas de dados.
A principal diferença entre CHR e outras linguagens de programação de restrições é que CHR não tem um solucionador de restrições dedicado. Em vez disso, o programador tem controlo total sobre o processo de resolução de constrangimentos. Isto permite um estilo de programação muito mais declarativo, onde o programador pode concentrar-se no que o programa deve fazer, e não em como o fazer.
A linguagem CHR foi concebida com a eficiência em mente. Baseia-se num pequeno conjunto de operações primitivas, que podem ser combinadas para formar operações mais complexas. A linguagem também é tipada estaticamente, o que permite uma execução mais eficiente.
CHR é uma ferramenta poderosa para a resolução de problemas complexos. É particularmente adequada para problemas que envolvem muita manipulação de dados, tais como a mineração de dados e a aprendizagem de máquinas.