Escher (programming language)

{{Infobox programming language

| name = Escher

| logo =

| paradigm = declarative: functional, logic

| year = mid-1990s

| designer = J.W. Lloyd

| developer =

| latest_release_version =

| latest release date =

| typing = static, manifest

| implementations = [http://mentalmodels4life.net/software/ Kee Siong Ng's implementation]

| influenced_by = simple theory of types

| influenced =

| operating_system =

| license =

| website =

| file_ext =

}}

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

  • [https://web.archive.org/web/20231008145644/https://www.bristol.ac.uk/engineering/new-structure/?id=1000073 Declarative programming in Escher],{{Dead link|date=October 2024}} JW Lloyd, University of Bristol, Bristol, UK, 1995
  • [https://users.cecs.anu.edu.au/~kee/Escher/ An implementation of Escher] (Some dead links can be reached from the [https://web.archive.org/web/20211127165402/http://users.cecs.anu.edu.au/~kee/Escher/ archived page] (or by substituting the new domain in the link in question).)

Category:Functional languages