2.编程命令och strängar
阿内·兰塔
Datorintroduktion 2009,D och DV,Chalmers&GU
瓦德·马特马提克
西弗罗?塔尔?Funktitoner?几何造型师?
所有som man kanöra埃克塔·雷森曼办公室:
- 定义精确
- ge slutgiltiga贝维斯
- 梅卡尼斯卡牛排
Om man vill skriva dator program Om nágot,krävs precis detta:
- matematisk建模
- 形式化(iett programsprák)
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
- 订单处理(Microsoft Word)
- 典型值
- 文本统计信息
- sökmotorer(谷歌)
- 马斯金·沃塞宁
Idag ska vi lära grunderna till公司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’]
男子det bekvämasteär special notationen med dubbelfnuttar:
“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艾德:艾德·瓦杰·罗德在发短信时得到了安纳特·罗德
- 斯文斯卡ord med norska ord(maskinöversättning)
- fula ord med anständiga ord(审查)
- Apple-ord med Microsoft-ord(texttvättning)
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”replace“jag”=“jeg”替换w=w
Funktionen beräknas基因组匹配av mönstren i samma ordning。德特弗尔斯塔穆斯坦·索姆·马查尔直到阿帕斯。
莫恩斯特·坎瓦拉
- konstanta värden,somendast matcar det samma värtet:
“杰格”
- 变量器,som matchar vad som helst:
w个
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)]
Vi skulle vilja skriva ut varje par som en rad,där talenär separeraded医学梅尔兰斯拉格。赫尔六世?
Frán tal至strängar
洛托斯·博尔贾·梅德·赫曼·斯科里弗电子技师par avtal med ett mellanslag emellan公司。
前奏曲>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公司解除武装
哈尔前奏曲
线
,som delar upp en sträng,直到en lista av strángar,维德·瓦杰·奈拉德斯特肯(\n个
)无线条
,som tar en lista av strängar och returnerar en stráng där varje元素ur listan slutar med ett nyradstecken
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 en effekt utanför den rena funktitionella matematiska världen。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男子科曼顿:
- ett bart uttryckär kommandot att beräkna dess värde
- 电子技师
让
科曼多特(kommandot att lägga till en definition i miljön där)senare kommandon ges公司
对象:瓦尔杰·尤特里克·索姆贝拉克纳(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公司(医学博士模块
)och公司瓦杰·拉德·索姆·博尔贾尔(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.Skriv en funktion公司
长度::[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.Skriv en funktion公司
缩写::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+2
tolkan som en定义av它
:
前奏曲>让它=2+2
Mönstermatching公司
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()