Publication:
Una implementación en Haskell de un lenguaje funcional no determinista

Research Projects
Organizational Units
Journal Issue
Abstract
En este trabajo se propone e implementa un lenguaje funcional que incorpora características habituales de este paradigma, como es el orden superior, ajuste de patrones o evaluación perezosa. Añade características no tan habituales como es el indeterminismo, expresado mediante funciones no deterministas, es decir, funciones que para unos argumentos dados pueden devolver más de un resultado. Este tipo de funciones existen en los llamados lenguajes lógico funcionales, que adoptan para el indeterminismo una semántica de compartición (call-time choice), en contraste con la semántica de no compartición (run-time choice) más típica de otros formalismos, como son los sistemas de reescritura. Lo específico del lenguaje nuevo que se va a proponer e implementar, Sharade, es que combinará ambos tipos de semánticas mediante primitivas que existirán en el propio lenguaje. La implementación del lenguaje está realizada íntegramente en Haskell, en contraste con las implementaciones clásicas de los lenguajes lógico funcionales, habitualmente basadas en Prolog. Haskell es un lenguaje funcional puro con un sistema de tipos muy fuerte, siendo el lenguaje de referencia en el ámbito de la programación funcional con evaluación perezosa. Aparte de fases auxiliares como son el análisis sintáctico y la inferencia de tipos, lo esencial de la implementación consiste en un proceso de traducción de programas fuente Sharade en programas objeto Haskell, aprovechando así muchas de las características de este último como lenguaje funcional. Los programas objeto hacen uso intensivo de programación monádica, a través en particular de una biblioteca Haskell para la programación con indeterminismo con call-time choice y evaluación perezosa, biblioteca ya existente pero que ha debido ser adaptada por nosotros para actualizarla a las nuevas versiones de Haskell.
This paper proposes and implements a functional language that incorporates common features of this paradigm, such as higher order functions, pattern matching or lazy evaluation. It adds a not so common feature, namely nondeterminism, expressed through non-deterministic functions, that is, functions that for given arguments can return more than one result. This type of functions exist in the so-called functional logic languages, which adopt for indeterminism a semantics of sharing (call-time choice), in contrast with the semantics of not sharing (run-time choice) more typical of other formalisms, such as rewriting systems. The specific thing about the new language that will be proposed and implemented, Sharade, is that it will combine both types of semantics through primitives that exist in the language itself. The implementation of the language is done entirely in Haskell, in contrast to the classic implementations of functional logic languages, usually based on Prolog. Haskell is a pure functional language with a very strong type system, being the reference language in the field of functional programming with lazy evaluation. Apart from auxiliary phases such as syntactic analysis and type inference, the essential part of the implementation consists of a process of translating Sharade source programs into Haskell object programs, thus enabling many of the latter’s features as a functional language. The object programs make intensive use of monadic programming, in particular through a Haskell library for programming with indeterminism with call-time choice and lazy evaluation, library already existing but that has had to be adapted by us to update it to new versions of Haskell.
Description
Trabajo de Fin de Grado, Universidad Complutense, Facultad de Informática, Departamento de Sistemas Informáticos y Computación, Curso 2018/2019
Unesco subjects
Keywords
Citation