Joy (ohjelmointikieli)

Ilo
Kieliluokka moniparadigma : toiminnallinen , konkatenatiivinen , pino
Esiintyi 2001
Tekijä Manfred von Thun
Kehittäjä Manfred von Thun, John Cowan
Tyyppijärjestelmä vahva , dynaaminen
Tärkeimmät toteutukset Joy0, Joy1, "Nykyinen ilo", "John Cowanin ilo", "JoyJ (Joy in jvmm)"
Vaikutettu Kaava , C
vaikutti Factor , Cat , V , Trith

Joy-ohjelmointikieli  on puhtaasti toiminnallinen kieli , jonka Manfred von Thun on kehittänyt La Trobe Universityssä Melbournessa , Australiassa . Ilo perustuu funktion koostumukseen, ei lambda-laskentaan . Se on Forthille sukua oleva kieli , mutta ei sen suora seuraaja. Joyta pidetään tällä hetkellä kanonisena esimerkkinä konkatenatiivisesta ohjelmointikielestä . [yksi]

Kuinka se toimii?

Joy eroaa muista ohjelmointikielistä (lukuun ottamatta kombinatorisia ohjelmointikieliä ja joitain esoteerisia kieliä , kuten unlambda ) lambda -operaattorin puuttumisella ja siten muodollisten parametrien puuttumisella . Tämän havainnollistamiseksi tässä on esimerkki siitä, kuinka neliöintifunktio voidaan määritellä pakollisessa ohjelmointikielessä ( C ):

int neliö ( int x ) { paluu x * x ; }

Muuttuja x on muodollinen parametri, joka korvataan todellisella arvolla, joka neliötetään funktiota kutsuttaessa. Toiminnallisessa kielessä ( Scheme ) sama funktio määritellään seuraavasti:

( määrittele neliö ( lambda ( x ) ( * x x )

Näiden kahden esimerkin välillä on monia eroja, mutta ne käyttävät muodollisia parametreja samalla tavalla. Joyssa neliöintifunktio määritellään seuraavasti:

MÄÄRITÄ neliö == dup * .

Kaikki Joyssa on funktio, joka ottaa pinon argumenttina ja palauttaa pinon tuloksena. Esimerkiksi luku "5" ei ole kokonaislukuvakio, vaan lyhyt ohjelma, joka työntää luvun 5 pinoon.

  • Dup - lause yksinkertaisesti kopioi pinon ylimmän elementin ja sijoittaa siitä kopion sinne.
  • * -operaattori ottaa pinosta kaksi ylintä elementtiä ja työntää tuotteensa sinne.

Joten neliöintifunktio yksinkertaisesti kopioi ylimmän elementin ja kertoo sen sitten itsellään, muodollisia parametreja ei tarvita. Tämä tekee Joysta tiiviin, kuten seuraava pikalajittelun määritelmä osoittaa :

MÄÄRITÄ qsort == [pieni] [] [uncons[>]split] [[vaihto] dip cons concat] binrec.

"binrec" on yksi monista Joyn rekursiivisista kombinaattoreista , jotka toteuttavat binäärirekursion. Se odottaa pinossa neljää ohjelmaliteraalia, jotka ovat:

  • lopetusehto (jos luettelo on "pieni" (1 tai 0 elementtiä), se on jo lajiteltu),
  • mitä tehdä, jos lopetusehto täyttyy (ei mitään tässä tapauksessa),
  • mitä tehdä oletusarvoisesti (jakaa luettelo kahteen osaan vertaamalla kutakin elementtiä ankkuripisteeseen) ja lopuksi
  • mitä tehdä lopussa (lisää ankkuripiste kahden lajitellun puolikkaan väliin).

Matemaattinen puhtaus

Muistiinpanot

  1. Dr. Dobbs

Kirjallisuus

Linkit