Escher (programming language)
Escher is a declarative programming language that supports both functional programming and logic programming models, developed by J.W. Lloyd in the mid-1990s. It was designed mostly as a research and teaching vehicle. The basic view of programming exhibited by Escher and related languages is that a program is a representation of a theory in some logic framework, and the program's execution is a deduction from the theory. The logic framework for Escher is Alonzo Church's simple theory of types.
Escher, notably, supports I/O through a monadic type representing the 'outside world', in the style of Haskell.
One of the goals of Escher's designers was to support meta-programming, and so the language has comprehensive support for generating and transforming programs.
Examples
MODULE Lambda.
CONSTRUCT Person/0.
FUNCTION Jane, Mary, John: One -> Person.
FUNCTION Mother : Person * Person -> Boolean.
Mother =>
x=Jane & y=Mary.
FUNCTION Wife : Person * Person -> Boolean.
Wife =>
x=John & y=Jane.
FUNCTION PrimitiveRel : -> Boolean.
PrimitiveRel =>
r=Mother \/ r=Wife.
FUNCTION Rel : -> Boolean.
Rel =>
PrimitiveRel \/
) &
PrimitiveRel & PrimitiveRel)).