Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...



Relevanta dokument
Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Introduktion till programmering. Undervisning. Litteratur och examination. Lärare. Föreläsning 1

SMD 134 Objektorienterad programmering

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Objektorienterad programmering D2

Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h

DD1361 Programmeringsparadigm. Carina Edlund

Att använda pekare i. C-kod

Tentamen OOP

Funktionell programmering. Haskell. Ge#ng started...

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Webbens grundbegrepp. Introduktion till programmering. Ytterligare exempel. Exempel på webbsida. Föreläsning 5

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

F5 Introduktion till digitalteknik

Föreläsning 1 & 2 INTRODUKTION

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Grunderna i stegkodsprogrammering

Hösten IKT-kompetens för bibliotekspersonal. ArtikelSök. Avancerad guide

Objektorienterad Programmering (TDDC77)

Textsträngar från/till skärm eller fil

TDP002 - Imperativ programmering

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Introduktion till PHP

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Grundläggande programmering med C# 7,5 högskolepoäng

Uppgift 1 (Oläsliga krypterade meddelanden)

Programmering A. Johan Eliasson

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Funktionell programmering DD1361

Matematisk statistik allmän kurs, MASA01:B, HT-14 Laboration 2

Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h

KPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Frågebanker, frågeuppsättningar och slumpvisa block

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

OOP Objekt-orienterad programmering

ALEPH ver. 18 ALEPH Digital Asset Module (ADAM)

pelle snickars, kb torsdag den 21 oktober 2010

Föreläsning 7 Strängar

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Tentaupplägg denna gång

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik

Bruksanvisning KABA MAS AUDITCON KABA MAS HAMILTON Modell 100, 200, 400, 50 och 52

Uppgift 2 Betrakta vädret under en följd av dagar som en Markovkedja med de enda möjliga tillstånden. 0 = solig dag och 1 = regnig dag

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 4: Poster

Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4.

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Styra olika typer av objekt som animering, video, ljud och Flashfilm

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

Föreläsning 7: Syntaxanalys

Introduktion till Haskell

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Sätt att skriva ut binärträd

Introduktion till programmering

Chapter 3: Using Classes and Objects


Automater. Matematik för språkteknologer. Mattias Nilsson

trafiksimulering Intro OU5 trafiksimulering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Kap9. Operatorn.. Hudak 9.4 sid 11. Fermats förmodan, eller Fermats stora sats säger att. xm + ym == zm har heltalslösningar om och endast om m == 2.

Föreläsning 3.1: Datastrukturer, en översikt

Förändringar i v5.2 SR-1

Aktiviteter markeras som borttagna i databasen istället för att raderas

PDA-applikationer med.net

Lite skoj - typ. 5DV085 - Programspråk. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

PROGRAMMERING A VC# 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL C#

TATA42: Föreläsning 10 Serier ( generaliserade summor )

Beslut om betalningsföreläggande

Övning 1 - Abstrakta datatyper

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

App-klient för smartphones Power BI Arbetsflöde CRM Online Webb-klienten Dokumenthantering Molnet...

Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB

DSV A Procedurell programmering 5 poäng Tentamen

CSN-rapportering, gymnasiet

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

ATF, kontroll resp. byte ATF-nivå, kontroll

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

LEGO Mindstorm-robot

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

för att uppdatera dina produkter dagligen på LeGuide.com Groups webbplatser

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Nu till dagens ämne: Vi rekapitulerar det första problemet ur ProblemI:

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Nada, KTH Tentamensdag maj -24 Tentamen i Funktionell Programmering Skrivtid 5 h

Extra övningar på SDD:er/SDT:er

Guide till LogMeIn. AnyWare. Så genomför du de praktiska övningarna på din AnyWare -kurs. Du är där med AnyWare! SE1311 LogMeIn Guide ALAG-UK/A.

Teknikprogrammet, inriktning informations- och medieteknik

Delmoment 2: Skapa nyhetsmallen (om det inte redan finns en nyhetsmall)

Sommarakademin 2010 SOMMARGUIDE

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

SEAPILOT s nya PREMIUM tjänst

Transkript:

Introduktion till programmering Standardfunktioner Tecken och strängar Utskrifter och effekter Föreläsning 2 Prelude Alla fördefinierade funktioner vi använder definieras i modulen Prelude. Denna modul importeras automatiskt i Haskell-program. Om man startar ghci utan att ange något filnamn är det modulen Prelude som laddas: $ ghci... Prelude> Innehållet i Prelude hittar ni här: http://hackage.haskell.org/packages/archive/base/latest/doc/html/prelude.html Standardfunktioner Vad används datorer till? Hoogle För att hitta information om standardfunktioner kan man använda sökmotorn Hoogle: http://www.haskell.org/hoogle/ Testa att söka på "take" samt på typen "Int -> [a] -> [a]" 1. Numeriska beräkningar I går använde vi ghci för att göra enkla beräkningar med tal (och listor av tal). Många viktiga datortillämpningar bygger på avancerade matematiska beräkningar med tal: Mobil kommunikation Hållfasthetsberäkningar för nya konstruktioner Väderprognoser Kryptering av kommunikation I den här kursen kan vi inte ens närma oss dessa tillämpningar.

Vad används datorer till? 2. Bearbetning av text Många andra tillämpningar handlar i stället om avancerad textbehandling: Ordbehandling och typsättning (Word etc). Sökmotorer (Google etc). Maskinell översättning mellan olika språk. I dag ska vi titta på enkel texthantering i Haskell. 3. Mycket annat Som inbyggd komponent i bilar, flygplan, telefoner, För att spela musik, visa film, spela spel, För att hantera stora databaser. Tecken och strängar i Haskell Typen Char Typen Char innehåller som värden tecken, vilka skrivs som i dessa exempel: 'a' 'B' '7' '?' För vissa speciella tecken finns särskild notation: '\n' för ny rad. Strängar I preluden definieras type String = [Char] så till exempel har listan ['k','o','r','k'] typen String. Men för strängar finns också en speciell notation. Vi kan bekvämare skriva denna lista som "kork". Funktioner med strängar En ny operator: konkatenering Strängar är listor, så vi kan göra så här Prelude> length "kork" 4 Prelude> [ c c <- "kork", c /= 'k'] "or" Prelude> take 2 "kork" "ko" Prelude> ['a'.. 'z'] "abcdefghijklmnopqrstuvwxyz" Prelude> ['a','a'..] "aaaaaaaaaaaaaaaaaaaaaainterrupted Interaktion med ghci Prelude> "kork" ++ "skruv" "korkskruv" Prelude> [1..5] ++ [3,8] [1,2,3,4,5,3,8] Prelude> "hej" ++ " " ++ "du" "hej du" Prelude> Operatorn ++ definieras i preluden, men med metoder som vi väntar med till nästa kurs. Men använda ++ kan vi göra!

Ytterligare två exempel Två till funktioner ur preluden rmspaces Definera en funktion rmspaces :: String -> String så att rmspaces str är samma som str men med alla blanktecken borttagna. count Definiera en funktion count :: Char -> String -> Int words Prelude> words "till och med" ["till", "och", "med"] Vilken typ har resultatet? unwords Prelude> unwords ["till", "och", "med"] "till och med" så att count c str är antalet förekomster av c i str. Översättning ord för ord Mönstermatchning En allmän idé Ersätt varje ord i en sträng med ett annat: Svenska ord med norska ord (maskinöversättning) Fula ord med anständiga ord (censur) Varje ord med sin första bokstav (förkortning) Var och en av dessa kan åstadkommas av translate str = unwords [replace w w <- words str] för en lämplig definition av replace. Övning Hur ska replace definieras för det sista exemplet ovan? Svenska till norska Vi kan definiera en ersättningsfunktion på följande sätt: replace "inte" = "ikke" replace "jag" = "jeg" replace w = w Exempel på översättning Prelude> translate "jag kommer inte med" "jeg kommer ikke med" Trots exemplet är översättning ord för ord otillräcklig för maskinöversättning.

Reversering Preludfunktionen reverse Prelude> reverse "korkskruv" "vurkskrok" Övning Definiera en funktion ispalindrome :: String -> Bool som avgör om argumentet är en palindrom. Prelude> ispalindrome "a man a plan a canal panama" True Man bortser från blanktecken i detta test. En bättre funktion skulle också godkänna A man, a plan, a canal Panama! Formattering Kvadratrotstabellen Från i går: [ (x, sqrt x) x <- [1..10] ] Hur får man utskriften som en snygg tabell: 1.0 1.0 2.0 1.41442135623730951 3.0 1.7320508075688772 4.0 2.0 och så vidare? Konvertering Ett första försök Prelude> 3 ++ " " ++ 5 <interactive>:1:15: No instance for (Num [Char]) arising from the literal `5' at <interactive>:1:15 Vi har ett typfel; ++ kan bara konkatenera strängar, inte tal. Funktionen show Funktionen show kan konvertera tal (och annat) till strängar: Prelude> show 3 "3" Prelude> show (2.5 + pi) "5.641592653589793" Prelude> show [1..5] "[1,2,3,4,5]" Ett nytt försök Vad blir resultatet? [ show x ++ " " ++ show (sqrt x) x <- [1.. 10] ] Vi provar förstås. Två preludfunktioner till lines :: String -> [String] unlines :: [String] -> String som delar upp i rader resp sätter samman till en lång sträng med radbytestecken mellan.

Nästan klart Lösningen Nästa försök unlines [show x ++ " " ++ show (x*x) x <- [1.. 10]] Vi provar igen! Sista pusselbiten Vi får precis det resultat vi vill, men som en sträng (ett Haskellvärde av typen String). Det vi skulle vilja i stället är att strängen skrivs ut. Utskriften är en effekt utanför den rena funktionella, matematiska världen. Men i Haskell kan man programmera utskrift av en sträng med preludfunktionen putstr. Prelude> putstr (unlines [ show x ++ " 1.0 1.0 2.0 1.4142135623730951 3.0 1.7320508075688772 4.0 2.0 5.0 2.23606797749979 6.0 2.449489742783178 7.0 2.6457513110645907 8.0 2.8284271247461903 9.0 3.0 10.0 3.1622776601683795 " ++ show (sqrt x) x Kolla att du kan rekonstruera vad som inte ryms på bilden på första raden!