Alma-0 es un lenguaje de programación de computadoras de múltiples paradigmas . Este lenguaje es una versión aumentada del imperativo lenguaje Modula-2 con funciones de programación lógica y una cómoda capacidad de retroceso . [1] Es pequeño, fuertemente tipado y combina la programación de restricciones , un número limitado de características inspiradas en la programación lógica y soporta paradigmas imperativos . El lenguaje aboga por la programación declarativa . Los diseñadores afirman que las soluciones orientadas a la búsqueda creadas con él son sustancialmente más simples que sus contrapartes escritas en un estilo de programación puramente imperativo o lógico. [2] Alma-0 proporciona construcciones naturales de alto nivel para construir árboles de búsqueda. [3]
Paradigma | multi-paradigma : restricción , imperativo , lógica |
---|---|
Familia | Wirth Modula |
Diseñada por | Krzysztof Apt, Marc Bezem, Jacob Brunekree, Vincent Partington, Andrea Schaerf |
Desarrollador | Centrum Wiskunde e Informatica |
Apareció por primera vez | 1997 |
Disciplina de mecanografía | estático |
Alcance | Léxico (estático) |
Sitio web | www |
Implementaciones importantes | |
Alma-0 | |
Influenciado por | |
Modula-2 |
Descripción general
Dado que los diseñadores de Alma-0 querían crear una propuesta distinta y sustancialmente más simple que los intentos anteriores de integrar construcciones de programación declarativa (como el retroceso automático) en la programación imperativa, el diseño de Alma-0 se guió por cuatro principios:
- La extensión basado en la lógica debería ser la baja compatible con el lenguaje de programación imperativo subyacente
- La extensión basada en lógica debe ser compatible hacia arriba con una extensión futura que admitirá la programación de restricciones.
- Los constructos que implementarán la extensión deben apoyar y fomentar la programación declarativa.
- La extensión debe mantenerse pequeña: se han propuesto e implementado nueve características nuevas
Alma-0 puede verse no solo como una propuesta de lenguaje de programación específica y concreta, sino también como un ejemplo de un método genérico para extender cualquier lenguaje de programación imperativo con características que admiten la programación declarativa.
La viabilidad del enfoque Alma-0 se ha demostrado mediante una implementación completa del lenguaje (incluida una descripción de su semántica) para un subconjunto de Modula-2 .
Características
Las características implementadas en Alma-0 incluyen:
- Uso de expresiones booleanas como declaraciones y viceversa
- Un dual para el
FOR
enunciado que introduce el no determinismo en forma de puntos de elección y retroceso. - Una
FORALL
declaración que introduce una forma controlada de iteración sobre el retroceso - Unificación que, aunque limitada al uso de la igualdad como asignación, produce un nuevo mecanismo de paso de parámetros .
Modos de programación imperativa y lógica
Los diseñadores de Alma-0 afirman que la asignación, que generalmente se evita en la programación puramente declarativa y lógica, es realmente necesaria en una serie de situaciones naturales, incluso para fines de conteo y registro. También afirman que los medios de expresión de tales usos "naturales" de la asignación dentro del paradigma de la programación lógica son antinaturales.
Referencias
- ^ Liu, Jed; Myers, Andrew C. (2003). JMatch: Coincidencia de patrones abstractos iterables para Java . Apuntes de conferencias en informática . 2562/2003. págs. 110-127. doi : 10.1007 / 3-540-36388-2_9 . ISBN 978-3-540-00389-2.
- ^ Partington, Vincent (julio de 1997). Implementación de un lenguaje de programación imperativo con backtracking (PDF) (Informe). Programación de la Universidad de Amsterdam, Grupo de Investigación . Consultado el 15 de febrero de 2021 .También en Postscript .
- ^ Van Hentenryck, Pascal; Perron, Laurent; Puget, Jean-François (octubre de 2000). "Búsqueda y estrategias en OPL". Transacciones ACM en lógica computacional . 1 (2): 285–320. CiteSeerX 10.1.1.17.836 . doi : 10.1145 / 359496.359529 .
- Jacob Brunekreef (1998). "Especificación algebraica anotada de la sintaxis y semántica del lenguaje de programación Alma-0" .
- Krzysztof R. Apt, Jacob Brunekreef, Vincent Partington, Andrea Schaerf (1998). "Alma-0: un lenguaje imperativo que admite la programación declarativa" .
- Krzysztof R. Apt, Andrea Schaerf (1998). "Programación en Alma-0, o Programación Imperativa y Declarativa Conciliada" .
- Krzysztof R. Apt, Andrea Schaerf (1998). "Integración de restricciones en un lenguaje de programación imperativo" .
- Krzysztof R. Apt, Andrea Schaerf (1999). "El proyecto Alma, o cómo la lógica de primer orden puede ayudarnos en la programación imperativa" .