Till KTH:s startsida Till KTH:s startsida

Visa version

Version skapad av Johan Montelius 2014-12-18 00:00

Visa < föregående | nästa >
Jämför < föregående | nästa >

Föreläsningar

Vi kommer att ha fjorton föreläsningar under kursens gång, dessa är inte obligatoriska men rekommenderade. Föreläsningarna kommer att diskutera och fördjupa aspekter som som kursliteraturen inte täcker.

Under kursens gång kommer presentationer att läggas upp.

Introduktion

Grunderna för funktionell programmering och grunderna för Erlang. Lambda-kalkyl och deklarativ semantik, beskriven med omskrivningsregler.

Erlang

Enkla program i Erlang, datatyper, mönstermatchning och hur man kan representera information.  Innan föreläsniongen skall ni ha sett de två första delarna i Erlang Solutions kurs:

  • Introduction to Erlang
  • Basic Erlang

Ni skall också ha läst kapitel 1 och 2 i Erlang Programming.

Rekursion I och II

Rekursion är kanske begreppet med högst tröskel inom funktionell programmering, idén är naturligtvis väldigt enkel men ställer till en del huvudbry till en början. Som komplement till dessa två föreläsningar finns Erlang Solutions föreläsningar:

  • Sequential Erlang

Under desa två föreläsningar kommer vi att gå igenom mycket av kapitel 2 i Erlang Programming from till och med "Recursion". Läs igenom delarna innan föreläsningarna.

Komplexitet

Vi tittar närmare på komplexitet och varför funktioner har den komplexitet de har. Eftersom funktioner på binära träd i många avseenden har bättre egenskaper än funktioner över listor, tar vi trädoperationer som exempel. Vi jämför även med motsvarande operationer för tupler och får förhoppningsvis en ökad förståelse för när man skall använda var.

Moduler och undantag

Vi avrundar den funktionella delen av Erlang genom att gå igenom hur vi bygger upp våra program med hjälp av moduler, samt hur vi tar hand om fel som uppstår vid körning.  Läs igenom kapitel 3 i kursboken samt andra hälften av kapitel 7 "Records and macros" (records, skall vi hantera senare). Titta även på motsvarande presentationer från Erlang Solutions för att repetera de begrepp som vi diskuterar.

Processer

Erlangs andra sida är att kunna beskriva kommuniserande processer på ett väldigt enkelt sätt. Vi diskuterar den så kallade actor-modellen och hur Erlang väljer att implementera den.  Läs kapitel 5, 6 och 7 i kursboken och se på föreläsningarna "Creating Processes and Message Passing" från Erlang Solutions.

Högre ordningens funktioner

Vi har sett det i beskrivningen av lambda-kalkylen och sett det skymta förbi i Erlang men vi skall nu gå igenom vad som menas med högre ordningens funktioner, hur vi skall evaluera dem och hur vi kan använda dem till att implementera generella algoritmer som sedan kan specialiseras beroende på domän.

Processer, datastrukturer, asynkron och synkron kommunikation

Vi backar bandet lite, vad är det egentligen vi håller på med - vad är det som processer ger oss som vi inte kunde göra i den funktionella världen? Är det mödan värt, kommer det bara med fördelar eller har vi släppt in djävulen?  Det är nyttigt att reflektera över vad vi kan göra med processer och vilka problem de har. 

Typsystem mm

Erlang är ett dynamiskt typat språk; typer kontrolleras under körning av program och inte under själva kompileringen. Detta medför att en hel del fel upptäcks först när programmet körs och resulterar i svårbegripliga felmeddelanden; varför kan inte kompilatorn kontrollera att vi använder rätt typer från början?

Läs resten av kapitel "Records and Macros" och kapitel "Types and Documentation" i kursboken.

OTP - ramverket för större system

Ett språk är en sak men för att vara produktiv måste man ha ett ramverk med kompilatorer, maskiner, bibliotek, tillämpningar mm; OTP är det ramverk som används för större system i Erlang. Vi kommer att titta på några av de funktioner som erbjuds i OTP för att beskriva processer och händelsehanterare samt gå igenom vilka andra redskap som finns. OTP är en stor apparat som ni inte skall börja använda nu; ni skall dock känna till begreppen och vilken nytta de ger i större projekt.

Sammanfattning

En återblick på funktionell programmering och  Erlang. Genom att implementera en meta-interpretator för ett funktionellt språk i Erlang ser vi dels hur enkelt det är att beskriva ett funktionellt språk, dels hur enkelt det är att gå från en definition av språket till en implementation.