Escher (programmeringsspråk)

Escher
Paradigm deklarativ : funktionell , logik
Designad av JW Lloyd
Dök först upp mitten av 1990-talet
Maskinskrivningsdisciplin statisk , uppenbar
Stora implementeringar
Kee Siong Ngs implementering
Influerad av
enkel teori om typer

Escher (uppkallad efter MC Escher , "en mästare på ändlösa loopar") är ett deklarativt programmeringsspråk som stöder både funktionell programmering och logiska programmeringsmodeller , utvecklat av JW Lloyd i mitten av 1990-talet. Det designades mest som ett forsknings- och undervisningsfordon. Den grundläggande synen på programmering som uppvisas av Escher och relaterade språk är att ett program är en representation av en teori i något logiskt ramverk, och programmets exekvering (beräkning) är en avledning från teorin. Det logiska ramverket för Escher är Alonzo Churchs enkla teori om typer .

Escher, särskilt, stödjer I/O genom en monadisk typ som representerar "världen utanför", i stil med Haskell . Ett av målen för Eschers designers var att stödja metaprogrammering , och så har språket omfattande stöd för att generera och transformera program.

Exempel

MODUL Lambda. KONSTRUKTERA Person/0. FUNKTION Jane, Mary, John: En -> Person. FUNKTION Moder: Person * Person -> Boolean. Mamma(x,y) => x=Jane & y=Mary. FUNKTION Hustru: Person * Person -> Boolean. Hustru(x,y) => x=John & y=Jane. FUNKTION PrimitiveRel : (Person * Person -> Boolean) -> Boolean. PrimitiveRel(r) => r=Mor \/ r=Hustru. FUNKTION Rel : (Person * Person -> Boolean) -> Boolean. Rel(r) => PrimitiveRel(r) \/ (SOMMA [r1,r2] (r = LAMBDA [u] (SOMMA [z] (r1(Fst(u),z) & r2(z,Snd(u) ))) & PrimitiveRel(r1) & PrimitiveRel(r2))).