TIEA341 Funktio-ohjelmointi 1, kevät 2008

Samankaltaiset tiedostot
TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Edward Sapir ja Benjamin Whorf esittivät viime vuosisadan alkupuolella kielitieteellisen

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

1. Olio-ohjelmointi 1.1

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Ohjelmistoarkkitehtuurit. Kevät

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Funktionaalisten kielten oppimisesta ja valinnasta

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

Matemaattisten työvälineiden täydentäviä muistiinpanoja

T Ohjelmistotekniikan seminaari

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

Tähtitieteen käytännön menetelmiä Kevät 2009

Ohjelmistoarkkitehtuurit. Syksy 2010

Ohjelmoinnin peruskurssien laaja oppimäärä

Johdanto. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Haskell ohjelmointikielen tyyppijärjestelmä

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla


Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Ohjelmistojen mallintaminen, kesä 2009

815338A Ohjelmointikielten periaatteet

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

LUENTO 7 TAULUKKOLASKENTA I

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Kurssin sisältö. Kurssilla vähemmän. Johdatus ohjelmistotekniikkaan. Mitä on ohjelmistotekniikka? Miten ohjelmistoja suunnitellaan ja toteutetaan?

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Ohjelmoinnin peruskurssien laaja oppimäärä

Demo 7 ( ) Antti-Juhani Kaijanaho. 9. joulukuuta 2005

Ohjelmoinnin peruskurssien laaja oppimäärä

Scheme-kesäkurssi luento 6

Computing Curricula raportin vertailu kolmeen suomalaiseen koulutusohjelmaan

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

Ohjelmistojen mallintaminen, kesä 2010

Kurssiesite Lausekielinen ohjelmointi I Kesä Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto

Luku 5. Monadit. 5.1 Siirrännän ongelma

Uusi näkökulma. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Lisää laskentoa. TIEA341 Funktio ohjelmointi 1 Syksy 2005

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

Z-skeemojen animointi Haskellilla

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (5 op) Tavoitteena

Java-kielen perusteet

5.5 Jäsenninkombinaattoreista

Ohjelmistoarkkitehtuurit. Syksy 2008

815338A Ohjelmointikielten periaatteet

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Java-kielen perusteet

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Ohjelmoinnin perusteet Y Python

5/20: Algoritmirakenteita III

11/20: Konepelti auki

Funktiot ja raja-arvo P, 5op

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

Ohjelmoinnin peruskurssien laaja oppimäärä

Tietoturva. 0. Tietoa kurssista P 5 op. Oulun yliopisto Tietojenkäsittelytieteiden laitos Periodi / 2015

Common Lisp Object System

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät Olio-ohjelmoinnin perusteet (eli Oope) Laajuus

Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018

1 Kompleksiluvut. Kompleksiluvut 10. syyskuuta 2005 sivu 1 / 7

Ohjelmoinnin peruskurssien laaja oppimäärä

7/20: Paketti kasassa ensimmäistä kertaa

Transkriptio:

TIEA341 Funktio-ohjelmointi 1, kevät 2008 Aloitusluento Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 7. tammikuuta 2008

Aikataulu Luennot salissa Ag C231.1: ma klo 10 12, to klo 14-16 Luennot pitää assistentti Antti-Juhani Kaijanaho (antti-juhani.kaijanaho@jyu.fi) Demot: sovitaan nyt Demot pitää tutkija Ville Tirronen (aleator@jyu.fi) Luennot + demot: 8 viikkoa (tammi-maaliskuu) Tentit: 28.3., 25.4., 25.7. Luennoijan vastaanottoaika: ke 12-14 (ei ajanvarausta)

Suoritus Tentti ja/tai demot Aktiivinen osallistuminen demoissa tuo korotuksen. 40 % +1 70 % +2 korotus lisätään hyväksytyn tentin arvolauseeseen Huomattava ahkeruus demoissa antaa vapautuksen tentistä 90 % kaikista tehtävistä ja 30 % joka kierroksen tehtävistä tulos automaattinen 5

Kirjallisuus Luentojen pohjana Paul Hudakin The Haskell School of Expression: Learning Functional Programming Through Multimedia Muuta alkeiskirjallisuutta: Graham Hutton: Programming in Haskell Simon Thompson: Haskell: The Craft of Functional Programming Richard Bird: Introduction to Functional Programming using Haskell

Täydentävää kirjallisuutta Fethi Rabhi ja Guy Lapalme: Algorithms: A Functional Programming Approach Chris Okasaki: Purely Functional Data Structures Jeremy Gibbons and Oege de Moor (toimm.): The Fun of Programming Simon Peyton Jones (toim.): Haskell 98 Language and Libraries: The Revised Report

Nettiresursseja!jyu-fp @ IRCnet #haskell @ Freenode http://www.haskell.org/ http://planet.haskell.org/ news:comp.lang.haskell news:comp.lang.functional

Ohjelmointiparadigmat paradigm, n. 1. A pattern or model, an exemplar; (also) a typical instance of something, an example. 2. [... ] 3. [... ] 4. A conceptual or methodological model underlying the theories and practices of a science or discipline at a particular time; (hence) a generally accepted world view. paradigm case n. a case or instance to be regarded as representative or typical. paradigm shift n. a conceptual or methodological change in the theory or practice of a particular science or discipline; (in extended sense) a major change in technology, outlook, etc. (OED draft revision Dec. 2007)

Ohjelmointiparadigmat ja -kielet 1950 IMPERATIIVINEN FORTRAN (pioneeriaika) FUNKTIONAALINEN LISP 1960 ALGOL (rakenteinen ohjelmointi) 1970 C PASCAL ML Scheme SASL 1980 1990 C++ Java (olio ohjelmointi) KRC Miranda Haskell SML OCaml Erlang 2000 C# F#

Funktio-ohjelmointi tuotantokäytössä Google MapReduce Ericssonin puhelinverkkokytkimet Jane Street Capital Galois Darcs

Tulevaisuuden ohjelmointia muistinsiivous (LISP; nyt Java, C#,... ) korkean kertaluvun funktiot (LISP; nyt melkein kaikkialla) geneeriset tyypit (ML; nyt kaikissa moderneissa kielissä) listakomprehensiot (NPL; nyt C#, Python, Perl 6) tyyppiluokat (Haskell; nyt myös C++0x) jotkut klassiset suunnittelumallit (esim. Command, Visitor, Strategy) ovat tapoja tehdä funktio-ohjelmointia oliokielissä = trendi: valtavirta sulautuu funktio-ohjelmoinnin kanssa

Haskell komiteatyönä suunniteltu 1980-luvun lopulla viimeisin standardi Haskell 98 (1999, 2003) työn alla Haskell (Haskell Prime) kohtuullisen tunnettu ja käytetty olennaisesti erilainen valtavirtaan verrattuna aktiivinen tutkimus- ja kehitystyö

Mekaaninen laskenta 3 (9 + 5) 3 14 42 yhteenlasku kertolasku 3 (9 + 5) 3 9 + 3 5 27 + 3 5 27 + 15 42 osittelulaki kertolasku kertolasku Siispä: 3 (9 + 5) = 42

funktio-ohjelma on laskutehtävä laskutehtävä ratkaistaan soveltamalla ongelmaan annettuja laskusääntöjä kunnes tulokseksi tulee arvo yksi askel merkitään lyhyellä nuolella, monta askelta (yhdeksi tiivistettynä) pitkällä nuolella

Funktioabstraktio simple x y z = x (y + z) simple 3 9 5 3 (9 + 5) 3 14 42 simplen soveltaminen yhteenlasku kertolasku Huomaa syntaksi: funktion parametrit/argumentit peräkkäin, ei sulkeita

Todistustekniikkaa simple a b c = a (b + c) simplen soveltaminen = a (c + b) yhteenlaskun vaihdannaisuus = simple a c b simplen abstrahointi (ei nuolta vaan yhtäsuuruus koska nyt ei olla laskemassa vaan osoittamassa samuutta)

funktion soveltaminen on laskusääntö, joka sanoo, että funktiolauseke voidaan korvata ko. funktion määritelmällä funktion abstrahointi on laskusääntö, joka sanoo, että lausekkeen saa korvata funktiolausekkeella käyttämällä funktiota, jonka määritelmä ko. lauseke on

Arvot... ovat laskutoimituksen lopputuloksia... ovat lausekkeita, joihin ei voi enää soveltaa mitään laskusääntöä... voivat olla atomisia: 42, a... voivat olla rakenteisia: [1,2,3] on lista, johon kuuluvat atomiset arvot 1, 2 ja 3 (tässä järjestyksessä ja mahdolliset duplikaatit säilyttäen) "kissa" on merkkijono, johon kuuluvat atomiset arvot k, i, s, s ja a (tässä järjestyksessä ja mahdolliset duplikaatit säilyttäen)

Keskustelua Miksi tulit kurssille? Mitä odotat kurssilta? Mieliala?