Kirjoittaja: Antti Laaksonen (22.12.2009)
J on 1990-luvun alussa syntynyt ohjelmointikieli, joka on saanut vaikutteita toisaalta APL-kielestä (taulukkojen käsittely) ja toisaalta FP- ja FL-kielistä (funktioiden käsittely).
J:ssä yksittäisten lukujen ja kaikkien taulukon lukujen käsittely muistuttaa toisiaan: samalla funktiolla voi laskea yhteen kaksi lukua tai kaikki taulukossa olevat luvut. Tämän ansiosta J soveltuu hyvin lukumuotoisen tiedon käsittelyyn.
Seuraava funktio tulostaa tekstiä:
joulu =: 'Hauskaa joulua!'
Funktiota kutsutaan seuraavasti:
joulu Hauskaa joulua!
Määritellään seuraavat funktiot:
vikat =: + / @: (_2 & {.) uusi =: , vikat kelpaa =: 100 & > lista =: (uusi ^: (kelpaa @: vikat)) ^: _
Nyt voidaan laskea Fibonaccin luvut, jotka ovat alle 100:
lista 0 1 0 1 1 2 3 5 8 13 21 34 55 89
Funktio vikat
kertoo taulukon kahden viimeisen luvun summan, funktio uusi
lisää taulukkoon seuraavan Fibonaccin luvun, funktio kelpaa
tarkistaa, onko luku alle 100, ja funktio lista
lisää taulukkoon Fibonaccin lukuja niin kauan, kuin kahden viimeisen luvun summa on alle 100.
Seuraavat komennot laskevat ensin kahden luvun summan, sitten kahden taulukon vastaavissa kohdissa olevien lukujen summat ja lopuksi taulukon kaikkien lukujen summan.
3 + 5 8 2 7 3 + 5 5 1 7 12 4 + / 7 1 3 4 4 19
Seuraava funktio tupla
kaksinkertaistaa sille annetun luvun. Määrittely tarkoittaa, että toinen kerrottava luku on 2 ja toinen on funktion parametri (merkintä &
).
tupla =: 2 & * tupla 8 16 tupla 7 1 3 4 4 14 2 6 8 8
Seuraava funktio keskiarvo
laskee taulukon lukujen keskiarvon. Funktio kytkee yhteen kolme muuta funktiota: + /
laskee lukujen summan, #
laskee lukujen määrän ja keskellä oleva %
tarkoittaa jakolaskua.
keskiarvo =: + / % # keskiarvo 7 1 3 4 4 3.8
J-ohjelman voi saada mahtumaan hyvin pieneen tilaan. Seuraavassa on lyhyempi versio Fibonaccin lukujen etsinnästä (42 merkkiä):
lista =: }:@:(((,(+/@:(_2&{.)))^:((100&>)@:{:))^:_)
Jos pystyt parempaan, lähetä ohjelmasi minulle sähköpostilla!