Funktionella språk

Från Unix.se, den fria unixresursen.

Funktionella språk arbetar från grundtanken att man, istället för att utföra programkod sekvensiellt som i imperativa språk, utför stegen mer som matematiska funktioner.

En funktion som används i imperativa språk är en loop. I funktionella språk ersätts dessa oftast med rekursion, det vill säga man låter funktionen anropa sig själv. Detta är naturligtvis inte unikt för funktionella språk, vilket illustreras med ett exempel nedan:

int fak(int n) {
    if (n < 1)
        return 1;
    else
        return (fak(n - 1) * n)
}

Denna enkla funktion implementerar alltså fakultetsfunktionen n! i C/Java.

Hur ser då samma kod ut i ett funktionellt språk? Här följer ett exempel av samma program i Standard ML:

fun fak (0) = 1
 |  fak (n) = fak(n - 1) * n;

if-satsen i den föregående kodsnutten har här ersatts av en inneboende funktion i Standard ML, möjligheten att matcha operatorer. Detta innebär att koden bara stannar på första raden om funktionen fak får en 0:a som indata. i annat fall fortsätter den till nästa rad. Där har vi istället variabeln n, som kan matcha vilket tal som helst. I övrigt är den andra raden väldigt självförklarande om man förstod det första kodexemplet.

Formella språk:
Standard ML (http://www.standardml.org/)
Lisp (http://www.lisp.org/) - Bland annat emacs är skrivet i Lisp.
Haskell (http://www.haskell.org/) - Utvecklat till stor del på Chalmers.

Personliga verktyg