Glädje | |
---|---|
Språkklass | multiparadigm : funktionell , konkatenativ , stack |
Framträdde i | 2001 |
Författare | Manfred von Thun |
Utvecklaren | Manfred von Thun, John Cowan |
Typ system | stark , dynamisk |
Stora implementeringar | Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)" |
Blivit påverkad | Schema , C |
påverkas | Faktor , Cat , V , Trith |
Programmeringsspråket Joy är ett rent funktionellt språk utvecklat av Manfred von Thun vid La Trobe University i Melbourne , Australien . Glädje bygger på funktionssammansättning, inte lambdakalkyl . Det är ett språk relaterat till Forth , men inte dess direkta efterföljare. Joy anses för närvarande vara det kanoniska exemplet på ett konkatenativt programmeringsspråk . [ett]
Joy skiljer sig från andra programmeringsspråk (med undantag för kombinatoriska programmeringsspråk och vissa esoteriska språk som unlambda ) genom avsaknaden av en lambda- operator, och därmed frånvaron av formella parametrar . För att illustrera detta är här ett exempel på hur kvadreringsfunktionen kan definieras i det imperativa programmeringsspråket ( C ):
int square ( int x ) { returnera x * x ; }Variabeln x är en formell parameter som ersätts av det faktiska värdet som ska kvadreras när funktionen anropas. I ett funktionellt språk ( Scheme ) definieras samma funktion enligt följande:
( definiera kvadrat ( lambda ( x ) ( * x x )))Det finns många skillnader mellan dessa två exempel, men de använder formella parametrar på ett liknande sätt. I Joy definieras kvadreringsfunktionen som:
DEFINIERA kvadrat == dup * .Allt i Joy är en funktion som tar en stack som ett argument och returnerar en stack som ett resultat. Till exempel är siffran "5" inte en heltalskonstant, utan ett kort program som skjuter upp siffran 5 i stapeln.
Så kvadreringsfunktionen duplicerar helt enkelt det översta elementet och multiplicerar det sedan med sig självt, inga formella parametrar behövs. Detta gör Joy kortfattad, vilket framgår av följande definition av quicksort :
DEFINIERA qsort == [små] [] [uncons[>]dela] [[swap] dip cons concat] binrec."binrec" är en av de många rekursiva kombinatorerna i Joy som implementerar binär rekursion. Den förväntar sig fyra programbokstavar på högen, som är: