Escher (programming language)

From Wikipedia, the free encyclopedia
Paradigmdeclarative: functional, logic
Designed byJ.W. Lloyd
First appearedmid-1990s
Typing disciplinestatic, manifest
Major implementations
Kee Siong Ng's implementation
Influenced by
simple theory of types

Escher (named for M. C. Escher, "a master of endless loops") 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 (computation) 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.


MODULE      Lambda.
CONSTRUCT   Person/0.
FUNCTION    Jane, Mary, John: One -> Person.

FUNCTION    Mother : Person * Person -> Boolean.
Mother(x,y) =>
    x=Jane & y=Mary.

FUNCTION    Wife : Person * Person -> Boolean.
Wife(x,y) =>
    x=John & y=Jane.

FUNCTION    PrimitiveRel : (Person * Person -> Boolean) -> Boolean.
PrimitiveRel(r) =>
    r=Mother \/ r=Wife.

FUNCTION    Rel : (Person * Person -> Boolean) -> Boolean.
Rel(r) =>
    PrimitiveRel(r) \/
    (SOME [r1,r2]
        (r = LAMBDA [u] (SOME [z] (r1(Fst(u),z) & r2(z,Snd(u)))) &
            PrimitiveRel(r1) & PrimitiveRel(r2))).