Extensions and Generalisations of Functional Programming


Embedded Systems

Few functional languages allow the expression of solutions to embedded control problems. We have an experimental system for programming embedded applications, using a process extension of the functional language Gofer.

Papers


GUIs

A variant of the Embedded Gofer system supports another current investigation: the use of functional languages to program graphical interaction. There is plenty of scope for future research into extensions of functional languages to include parallel processes.

Papers


Relational Programming

Another line of research we have developed concerns relational programming systems. Relational programming in principle generalises functional programming and also serves as a basis for logic programming. A new relational programming language has been designed and implemented, with automatic representation selection for relations.

The two most successful types of declarative programming language to date are functional and logic programming languages. In many ways they are similar, but each has its own strengths and weaknesses: functional programming supports higher order definitions and lazy evaluation, but logic programming better handles non-deterministic (search based) computation and allows reasoning about relationships. Since their strengths are complementary there has been much research into integrating the two paradigms - though rarely with an appropriate coherent mathematical basis. MacLennan has suggested a paradigm based on relations: these are generalisations of functions but can also serve as a basis for logic programming.

MacLennan's relational programming system was constrained by an explicit division of relations and operations over them according to fixed representation schemes. Our first aim is to develop a new relational programming system, avoiding this division as far as possible. Our second aim is to gain a relational perspective on both logic and functional programming styles.

A new relational language, Drusilla, has been designed and implemented. The crucial factor in the implementation is a type system based on Milner polymorphism which permits automatic representation selection for relations as well as ensuring type correctness of programs. This has significantly relaxed the above-noted constraint. Initial experiments have shown that all the functional and logic features identified above are available to the programmer.

Papers

References


York Functional Programming Group
(University of York Department of Computer Science)