Escher (programmeringsspråk)
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))).
- Deklarativ programmering i Escher , JW Lloyd, University of Bristol, Bristol, Storbritannien, 1995
- En implementering av Escher (Vissa döda länkar kan nås från den arkiverade sidan (eller genom att ersätta den nya domänen i länken i fråga).)