2.编程med ord och strängar

阿内·兰塔
Datorintroduktion 2009,D och DV,Chalmers&GU

瓦德·马特马提克

西弗罗?塔尔?Funktitoner?几何造型师?

所有som man kanöra埃克塔·雷森曼办公室:

Om man vill skriva dator program Om nágot,krävs precis detta:

Detär基因组材料建模vi kan skriva程序som handlarinte bara om tal、utaäven ord、texter、bankkonton、mobila nätverk、,安斯泰尔达·埃特·弗雷塔格。。。

处理av ord och strängar

维基加tillämpnigar av datorer

Idag ska vi lära grunderna直到sträng处理我是哈斯克尔。

Nästa gáng ska vi至ampa kunskapen至större texter。

Strängar och tecken公司

En sträng公司(字符串)i Haskellär en lista av公司泰肯(烧焦):i前奏曲定义类型

type String=[Char]

Ett tecken anges i enkelfnuttar公司:

“a”

En sträng kan sáledes anges med de kända符号erna för listor:

[‘k’,‘o’,‘r’,‘k’]

男性专用符号:

“kork”(韩国)

Funktitoner med strängar公司

Mycket av kraften ligger i att alla listoperationer fungerr med strängar:

['a'..'z'][x|x<-“kork”,x/=“k”]['a','a'…]长度“kork”拿两个“kork”

Vi ska sitta ner och beräkna dessa公司。

男子vissa listoperationerär speciellt användbara med strängar:t.ex。空降作用,++:

“kork”++“skruv”==“korkskruv“

实验med strängfunktitoner

Konkatenera tvánsträngar med ett mellanslag emellan公司。

“hello”++“”++“world”

Ta bort alla mellanslag frán en stráng村.

unspace::String->字符串取消空间s=[c|c<-s,c/='']

Räkna hur mánga gánger bokstavenk个förekommer i en sträng公司.

number_k::字符串->整数number_k s=长度[c|c<-s,c==‘k’]

Mera实验med strängfunktitoner

Eliminera fyrbokstavsord公司(“四个字母的单词”)弗伦·恩·奥德利斯塔ws公司.

unfour::[String]->[String]unfur ws=[w | w<-ws,长度w/=4]

Ta ut initialerna av en lista直到en sträng。

首字母缩写::[String]->[String]缩写ws=[取1 w|w<-ws]

Strängar och ord公司

En sträng kan delas upp i ord vid avgränsande mellanslag och nyradstecken公司。Detta görs med前奏曲-funktionen:

单词“直到och med”==[“直到”,“och”,“med”]

Lát oss ta initialerna frán varje ord i en stráng(来自瓦杰恩街):

首字母缩写s=[take 1 w|w<-words s]

När vi har hanterat färdigt varje ord,kan vi skriva tillbaka den我的生活很艰难nya strängen医学院解除武装:

unwords(缩写(单词“until och med”)==“t o m”

对象。解除武装斯卡帕·因盖特·梅尔兰斯拉格·埃夫特(skapar inget mellanslage efter det sista ordet)。

弗罗斯滕:är det alltid sáatt

unwords(单词s)==s

Ge bevis eller汽车旅馆!

Ord-för-Ordöversättning公司

Idé:ersätt varje ord i en text med ett nágot annat ord艾德:艾德·瓦杰·罗德在发短信时得到了安纳特·罗德

Det finns ett generellt mönster i程序:

翻译::字符串->字符串translate s=unwords[replace w | w<-words s]

där村替换::字符串->字符串.

Mönstermatching公司

Vi-kan definiera en ersättningsfunktion医学跌倒分析仪,med hjälp av公司莫恩斯特匹配:

替换::字符串->字符串替换“inte”=“ikke”替换“jag”=“jeg”替换w=w

Funktionen beräknas基因组匹配av mönstren i samma ordning。德特弗尔斯塔穆斯坦·索姆·马查尔直到阿帕斯。

莫恩斯特·坎瓦拉

Nu fángas alltsáalla ord som inte behöverändras med variabeln村w个、och sammaord returneras som värde。

translate“jag kommer inte-med”==“jeg kommer-ikke med”

Om maskinöversättning公司

Ord-för-Ord metodenär inte sájättebra:se t.ex.den svenska versionen av公司德哈·西丹.

倒车

Funktionen som returnerar en lista i omvänd订单:

反面::[a]->[a]

Exempel公司:

反向[1,2,3]==[3,2,1]反转“en-korkskruv”==“vurkskrok ne”

Exempel:测试回文,dvs.samma baklänges(t.ex.“转子”)。

回文::String->Bool回文s=反面s==s

梅拉回文

Det finns en samling i t.ex公司。维基百科;

我是Reval sitta ni alla I natt I slaveri

观察者:mellanslag ignoreras i palindromestet:

回文::String->Bool回文s=unspace(反面s)==unspace s

(德特·哈尔·昆德·戈拉斯(Det här kunde göras effektivare förstás)

格式化问题集

Pöförsta föreläsningen skapade vi tabeller,t.ex.kvadrattabellen公司

[(x,x*x)|x<-[0..10]]

Tyvärr blev utseendet lite trákigt:

[(0,0),(1,1),(2,4),(3,9),(4,16),(5,25),(6,36),(7,49),(8,64),(9,81),(10,100)]

我是一个很好的朋友,我是一个很好的朋友梅尔兰斯拉格。赫尔六世?

Frán tal至strängar

洛托斯·博尔贾·梅德·赫曼·斯科里弗电子技师帕·阿夫·塔尔·梅德特·梅兰斯拉格·埃梅伦。

前奏曲>3++“”++5<交互式>:1:0:(Num[Char])没有实例源自<interactive>处的文字“3”:1:0...

Nágon排序特普菲尔.Poängenär att公司“”巴拉坎·康卡捷内拉斯医学院en sträng,inte med ett heltal。

维穆斯特康维特拉直到斯特朗加。Konvertering till strängar公司哥尔斯(för de flesta typer)med funktitonen显示.所有人:

显示12==“12”--Int显示3.14==“3.14”--浮点显示[1,2,3]==“[1,2,4]”--[Int]show“hello”==“\”hello\“”--字符串

格式化av tabeller

Nu vet vi att vi ska skriva sáhár:

前奏曲>演出3++“”++演出5"3 5"

奥特斯特·r att hantera listan av alla rader:

[显示x++“”++显示(x*x)|x<-[0..10]]

尼拉德斯特肯医学院Vi vill skriva ut listan som en sträng梅兰·瓦杰元素。

模拟医学och公司解除武装哈尔前奏曲

Skriva utt en sträng公司

Det hár ser intealls胸罩:

前奏曲>取消连接[show x++“”++show(x*x)|x<-[0..10]]“0 0 \n1 1 \n2 4 \n4 16 \n5 25 \n6 49 \n8 64 \n8 81 \n10 100 \n”

问题:GHCi visarstränguttrycket公司,i ett格式som skulle kunnaanvändas i en Haskell-fil公司。

第六颅骨村斯科里夫斯·乌特.

Utskriftenär在音乐节上发挥了作用。Men i Haskell kan man programmera utskrift av en sträng med前奏曲-funktionenputStr(输入Str):

Utskrift av kvadrattabellen公司

前奏曲>putStr(unlines[show x++“”++show(x*x)|x<-[0..10]])0 01 12 43 94 165 256 367 498 649 8110 100

对象:打印xär samma som先生putStr(显示x++“\n”).

国家:奥地利IO冲洗器(输入-输出)。

Vad fár man skriva och var?

我恩哈斯克尔·菲尔:定义者,som bestár av公司

FUNKTIONSNAMN变量=UTTRYCK

Detta betyder att funktionsnamet fár användas i samma fillernär filen laddas i GHCieller importeras i en annan fil公司。

直到GHC项目:uttryck,dvs.högerled av定义人。

模块>UTTRYCK

Detta betyder att GHCi ska beräkna värdet av uttrycket och签证详情。

曼坎内部斯科里瓦·埃特(skriva ett)诱捕厄特里克(uttryck i en fil)。

国际海勒kan man skriva在提示前定义。

定义词i GHCi

Det公司är村faktiskt möjligt att skriva定义器direct i GHCi。

曼·斯特安瓦恩达·奈克洛德特:

序曲>让fac n=产品[1..n]前奏曲>fac 6720

Alltsá:直到提示skriver男子科曼顿:

对象:瓦尔杰·尤特里克·索姆贝拉克纳(varje uttryck som beräknas)的定义:de följande raderna har samma效果:

前奏曲>2+2前奏曲>让它=2+2

提升机

Redovisning公司

Uppgifterna ska redovasis i en fil公司示例2.hs,som erhálls基因组阿特斯阿塔阿拉未定义伊夫利贾德:

模块Main,其中main=做打印ex2打印ex3putStr ex4ex2=长度“i en bra film finns alltid droider”长度::字符串->[Int]长度s=未定义ex3=缩写“Very Superior Old Pale”缩写::String->String缩写s=未定义示例4::字符串ex4=未定义

Obs公司:om du kopierar koden,se-till att den första raden公司(医学博士模块)奥赫瓦杰·拉德·索姆·博尔贾尔(varje rad som börjar frán samma position flyttas till bör jan)av raden公司。

Uppgifterna公司

1.Kör minst有限元示例ur denna föreläsning,med minst en egen变量av varje。

2.恐惧

长度::[String]->Int

som läser en sträng och returnerar listan av公司längderna pávarje ord。乌特里基特例3定义:som tillämpning av denna funktion till“我在胸罩电影《芬妮斯·艾尔蒂德·德罗德》”。

3.恐惧

缩写::String->String

som tal initialerna av alla ord i en sträng姓名首字母缩写och skriver dem tillbaka i en sträng med en punkt och ett mellanslag:

缩写“till och med”==“t.o.m.”

乌特里基特例3定义:som tillämpning av denna funktion till“非常上乘的老苍白”。

4.Skriv om Fahrenheit-tabellen frönövning 1.2 páett sádant sätt att公司瓦杰·塔尔帕·科默·佩恩·埃根·拉德(varje talpar kommer páen-egen rad),医学院电视台梅兰斯拉格·梅兰·塔伦(mellanslag mellan talen)。特克斯。

120.0  48.888888888888886

Svaret ges i uttyck公司例4.

5.Skriv en ord-till-ordöversättare med egen公司代替-功能。Behöver国际重新签证。

Sammanfattning och裁判

定义词i GHCi

提示前,Man kan skriva en定义:

序曲>让fac n=产品[1..n]

评估av ett uttryck t.ex。2+2tolkan som en定义av:

前奏曲>让它=2+2

Mönstermatchning公司

En funktion kan definieras med En sekvens av definitioner,德国瓦杰定义汉特拉·埃特(hanterar ett)落到了梅德·埃特·莫恩斯特(ett mönster)手里。特克斯。

替换::Char->Char替换“v”=“w”替换c=c

En variabel somöster hanterar allt som inte hanterats av tidgare公司莫恩斯特。

Tecken och街道

type String=[Char]“kork”==['k','o','r','k']

前奏曲funktitoner

--康卡捷纳列表器(++)::[a]->[a]->[a]--塔夫兰·奥尔登/拉德纳单词::String->[String]行::String->[String]--använd strängarna som ord/rader i en stráng公司unwords::[String]->字符串unlines::[String]->字符串--returnera motsatsen公司不::Bool->Bool--李斯坦·巴克兰反面::[a]->[a]--konvertera värde至strängshow::(show a)=>字符串--skriv ut en sträng公司putStr::字符串->IO()