Agda | |
---|---|
Språkklass | funktionell , teorembevisare |
Framträdde i | 2007 (1,0 1999 ) |
Författare | Ulf Norell |
Filtillägg _ | .agdaeller.lagda |
Släpp | 2.6.2.2 (2 april 2022 ) |
Typ system | statisk , strikt , beroende |
Blivit påverkad | Haskell , Coq , Epigram |
påverkas | Idris |
Licens | BSD |
Hemsida | wiki.portal.chalmers.se/… |
OS | Microsoft Windows och Unix-liknande operativsystem |
Agda är ett rent funktionellt programmeringsspråk med beroende typer , det vill säga typer som kan indexeras med värden av en annan typ. Den teoretiska grunden för Agda är Martin-Löfs intuitionistiska typteori , som utökas med en uppsättning konstruktioner användbara för praktisk programmering.
Agda är också ett automatiskt provsystem . Logiska propositioner skrivs som typer, och bevis är program av motsvarande typ.
Agda stöder induktiva datatyper, mönstermatchning (flexibelt genom att använda närvaron av beroende typer), ett system med parametriserade moduler, kontroll av programavslutning, mixfix-syntax för operatorer. Stöd för implicita argument förenklar programmering med beroende typer. Agda - program kännetecknas av den utbredda användningen av Unicode .
Standardimplementeringen av Agda inkluderar ett tillägg till Emacs- redigeraren som låter dig bygga program steg för steg. Språkets typkontrollsystem ger programmeraren användbar information om delar av programmet som ännu inte har skrivits.
Den specifika syntaxen för Agda-språket ligger mycket nära syntaxen för Haskell , på vilken Agda-systemet är implementerat.
Naturliga tal och deras addition
data Nat : Ställ in där noll : Nat suc : Nat -> Nat _+_ : Nat -> Nat -> Nat noll + m = m suc n + m = suc ( n + m )Exempel på en beroende typ: en lista vars typ lagrar ett naturligt tal - dess längd
data Vec ( A : Set ) : Nat -> Ange där [] : Vec A noll _::_ : { n : Nat } -> A -> Vec A n -> Vec A ( suc n )En säker listhuvudberäkningsfunktion som inte tillåter att denna operation utförs på en tom lista (noll längd):
head : { A : Set }{ n : Nat } -> Vec A ( suc n ) -> A huvud ( x :: xs ) = xProgrammeringsspråk | |
---|---|
|