El lenguaje de programación Kaleidoscope es un lenguaje de programación de restricciones que incorpora restricciones en un lenguaje imperativo orientado a objetos . Agrega palabras clave siempre , una vez , y afirmar .. durante (antes mientras .. afirmar ) para hacer declaraciones sobre invariantes relacionales. Los objetos tienen constructores de restricciones, que no son métodos, para hacer cumplir los significados de los tipos de datos definidos por el usuario.
Hay tres versiones de Kaleidoscope que muestran una evolución de un estilo declarativo a un estilo cada vez más imperativo. Las diferencias entre ellos son las siguientes. [1]
Caleidoscopio'90 | Caleidoscopio'91 | Caleidoscopio'93 | |
---|---|---|---|
Evaluación de restricciones | Perezoso | Entusiasta | Entusiasta |
Variables | Mantener transmisiones | Mantener transmisiones | Imperativo |
Restricciones concurrentes | Estricto | Estricto | No estricto |
Sintaxis | Como Smalltalk | Como algol | Como algol |
Modelo de restricción | Refinamiento | Refinamiento | Perturbación |
Envío de método | Único | Múltiple | Múltiple |
Asignación | Como una restricción | Como una restricción | Destructivo |
Ejemplo
Compare los dos segmentos de código, los cuales permiten al usuario arrastrar el nivel de mercurio en un termómetro gráfico simple con el mouse.
Sin restricciones:
while mouse.button = down do antiguo <- mercurio.top; mercury.top <- mouse.location.y; temperatura <- mercurio.altura / escala; si es viejodelta_grey (antiguo, mercurio.top); display_number (temperatura); elseif old> mercury.top entonces delta_white (mercurio.top, antiguo); display_number (temperatura); terminara si;terminar mientras;
Con limitaciones:
siempre: temperatura = mercurio. altura / escala;siempre: rectángulo blanco (termómetro);siempre: rectángulo gris (mercurio);siempre: número de pantalla (temperatura);while mouse.button = down do mercury.top = mouse.location.y;terminar mientras;
Referencias
- López, Gus; Bjorn Freeman-Benson; Alan Borning (1994). "Caleidoscopio: un lenguaje de programación imperativo de restricción". Programación de restricciones . Springer-Verlag. págs. 313–329.
- Marriott, Kim; Peter J. Stuckey (1998). Programación con restricciones: una introducción . Prensa del MIT.ISBN 0-262-13341-5