Jump to content

Escher (programming language)

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Escher
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.

Examples

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))).

References