Joy (programmeringsspråk)

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]

Hur det fungerar?

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.

  • Dup -satsen duplicerar helt enkelt det översta elementet i stacken och lägger en kopia av det där.
  • Operatören * tar de två översta elementen från stapeln och skjuter dit deras produkt.

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:

  • uppsägningsvillkor (om listan är "liten" (1 eller 0 element) är den redan sorterad),
  • vad ska man göra om uppsägningsvillkoret är uppfyllt (inget i det här fallet),
  • vad man ska göra som standard (dela listan i två halvor genom att jämföra varje element med en ankarpunkt), och slutligen
  • vad ska man göra i slutet (lägg in ankarpunkt mellan två sorterade halvor).

Matematisk renhet

Anteckningar

  1. Dr. Dobbs

Litteratur

Länkar