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.