1.Datoranvändning,matematiska计划阿内·兰塔Datorintroduktion 2009,D och DV,Chalmers&GU%!目标:html%!postproc(html):#NEW%!postproc(html):#HR
#新款==德黑尔·库森==介绍截止日期-达托拉诺瓦恩丁-编程-数据vetenskapUtformad för dem som vet och skall veta allra mest om datorer och编程-D-linjen páChalmers-DV-linjen pöteborgs大学#新款==Webbsidan==Hur hittar man den:från svårast直到lättast0.Navigera i Chalmers研究门户```http://www.student.chalmers.se网站/```1.Anteckna URL(统一资源定位器)```网址:http://www.cs.chalmers.se/~aarne/datorintro/```2.Googla med公司```datorintroduktion D-linjen Chalmers公司```3.Googla med läraren公司```阿内·兰塔```tryck pá“Datorintroduktion”#新款==库森斯uppbygnad==Vi gár snabbt基因组[kurswebbsidan.],för att förklara-库尔森领导下的vad man ska lära sig-赫尔曼·斯卡·格拉·福尔(ska göra för att klara kursen)#新款==数据vetenskap==**Datavetenskap**(计算机科学)har sina rötter pátváll:-马特马提克-电子技术Datavetenskap kan därför se rätt sáolika ut beroende pá数据仓库。#新款==Hårdvara och mjukvara==hárdvara=蒙斯坦瓦拉,mjukvara=程序瓦拉```米丘瓦拉användar程序--Firefox、emacs、GHCoperativesystemet--Windows、Unix、Symbian-------------------------------------------------------------阿尔德瓦拉datorn--PC、Mac、iPhone、PSP```#新款==Operativsystemet Unix==Första versionen i 1970年namnen Linux、Mac OS X、SunOS、BSD下的Känns numera。。。Fungerar páalla分拣机屏蔽器Populärt平淡的专业节目-användaren kan lätt程序集系统-relativt文胸säkerhet-“känns rätt”p.g.a.enkelhet,tydlighet,modularitet,ortogonalitet,öppenhet#新款==Huvuddelarna i Unix==Kärnan(工程内核):närmast hárdvaranFilsystemet:kataloger och文件管理器Kommandotolken(工程外壳):närmast användarenDärtill公司:-打桩机-弗恩斯特系统-格拉维斯卡·格朗斯奈特#新款==Shellkommandon公司==När man matat in an vändar ID och lösenord,kommer man of ast in i ett(在我的家乡)fönstersystem公司。Man kan döppna ett“shell”,som kan heta“terminal”,“konsole”,“xterm”,“cygwin”等。我是雪伦·科尔维·费尔詹德·科曼顿(vart ochett efter prompten``$``):```$whoami--visa mitt användarnam签证$pwd—打印工作目录$ls--lista innehállet i图书目录$mkdir datorintro——för kursen图书馆$cd datorintro--gátill det nya图书目录```För mera信息:参见Unix-kompendiet(kommer snart)#新款==Emacs公司==En texteditor somär mánga程序更受欢迎。在skriva计划中,我选择了Speciellt lämpligt för。Kanöppnas frán shellet med kommandot``emacs``,eller eventuellt frönen-meny我是“应用程序”eller motsvarande。船级社:```$emacs MyProgram.hs--öppna文件n MyProgram.hs i emacs-editorn```#新款==程序==Vi lär ut Haskell först先生Senare lär vi Java,C,汇编程序Ochännu lägre:数据集,kretselektronik。。。Ochännu högre:matematiska modeller av beräkning公司Och bryggan mellan niváer:**科皮拉托雷**#新款==康皮莱顿==Kompilatronär ett程序som automatisktöversätter högnivásprák直到马斯金斯普拉克。Detär där för programmerarna(过去)kan hálla sig直到högnivásprák。Detär där för samma程序kan köras pöolika分拣器数据器。#新款==GHC(i)==GHC=格拉斯哥-哈斯克尔编译器GHCi=GHC互动Vi kommer att公司-skriva Haskell程序-医疗GHCi-科拉德姆·帕达通GHC(i)finns för Linux、Mac、Windows。。。免费赠送[``www.haskell.org/ghc``www.haskell.org/ghc]#新款==Ett sätt att använda GHC(i)==启动ett GHCi-shell i Unix-shellet och skriva程序直到提示```$ghci前奏曲>2+24前奏曲>总和[1..100]5050```Snabbt och effektivt för mycket korta项目。阿尔文·福尔(Val ven för att testa längre)项目。#新款==全球统一制度(i)==Skriv程序i en fil,t.ex。``MyProgram.hs``,i GHCi中的läs,och kör i GHCi```序曲>:l MyProgram.hs我的程序>阶乘12479001600```Snabbt för程序stora som smá,男性智能化。Det vi mest an vänder resten av kursen警察局。文件``MyProgram.hs``kan se ut sáhär:```阶乘n=乘积[1.n]```#新款==Funktitonell编程==Haskellär ett**funktitonellt程序**Köra ett程序=beräkna värdet av en funktion med givna参数Exempel frán matematik公司://f:R->R////f(x)=(x+1)(x-1)////f(3.1)=8.61//(Ungefär)哈斯克尔豁免条款:```f::浮动->浮动f x=(x+1)*(x-1)我的程序>f 3.18.61```#新款==Aritmetiska funktitoner i Haskell==Heltal,flyttal:``Int``,``浮点``De fyra räknesätten:``+-*/``Potensupphöjning:``2.7^6``Dessa kan kombineras i**uttryck**,där parenteser kan behövas:```前奏曲>2+3*414前奏曲>(2+3)*420```Nu ska vi sitta ner och göra nágra beräkningar公司。#新款==前奏模块n==GHC支持visar den**模块**vars funktitonerär tillgängliga。英语模块,som heter ``前奏曲``är alltid tillgänglig。在ett-annat节目《前奏曲》(Prelude`tillgänglig)中,他甚至扮演了哈拉达特。``前奏曲“inneháller de flesta funktitoner vi behöver pádenna kurs,t.ex。马蒂马提斯卡·芬克蒂昂纳(de viktigaste matematiska funktitionerna)。#新款==列表器==你的定义是什么?刚确定:vi behöver en**lista**av tal。Listor kan skrivas páolika sätt:```[][1,2,3}[1 .. 100][2,4.100]```前奏曲``sum``tar en lista av tal och returnerar德拉斯萨玛。编号:```前奏曲>总和[1,2,3]/32前奏曲>总和[1..100]/10050.5```#新款==Oändliga列表器==En lista kan vara oändlig公司。```前奏曲>[1..][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42、43、44、45、46、47、48、49、50、51、52、53、54、55、56、57中断。```试着控制Cör att avbryta beräkningen!你的总结是什么?```前奏曲>总和[1..]前奏曲>总和[0,0..]```Dags att sitta ner och实验者。#新款==值frán en lista==Hur skriver vi listan av jämna tal mellan 1 och 100?Antingen med steging医学:```[2,4 .. 100]```eller ocksámed en**列表预张力**:```[x|x<-[1..100],偶数x]```Delarna i listkomphrensionen公司:-resultrande元素:``x``-**生成器**:`x<-[1..100]``-**villkor**:``偶数x``Obs.``甚至``är en funktion som avgör om ett talär jämnt。Den返回者``正确``eller``False``。#新款==Mera val frán en lista公司==Vi ska sitta ner och prova示例:-listan av alla tal somär udda(``奇数``)-listan av alla tal somär mindreän(``<``)50岁-利斯塔av alla tal vars kvadratär mindreän 200-listan av alla tal somär lika med(``==``)sig själva#新款=='Och'Och'eller'==Villkor kan kombineras med``&``(“och”)och``||`(“eller”)。列表10 eller störreär 90:```[x|x<-[1..100],x<10||x>90]```#新款==胡姆嘎==Funktition``length``anger en listas**längd**som heltal。```前奏曲>长度[]0前奏曲>长度[2,4..100]50前奏曲>长度[1,1,1]```观察者att``length``räknar varje etta separate i det tredje示例。Hur mánga tal uder 100 har kvadrat mindreän 500?```长度[x|x<-[1..100],x*x<500]```#新款==ava ndra resultate i listkomphangension==平均值==第1条至第6条:;```[x+1|x<-[1..100]]```平均回报率列表:```[x*x|x<-[1..100]]```Ta en lista av tal och returnera talens fakutter公司:```[产品[1..x]|x<-[1..20]]```Ta en lista av tal returnera kvadraterna av dem somär udda公司:```[x*x|x<-[1..100],奇数x]```Nu ska vi verkligen sitta ner och实验者!#新款==克里普av en lista==Man kan“klippa av”början av en lista,även oändlig,med ``服用``:```取5[1..]=[1,2,3,4,5]取5[1,2,3]==[1,2,3]```Med detta kan man skapa**approximeringar**av en oändlig lista医生:```前奏曲>take 10[1/n|n<-[1..]][1.0,0.5,0.333333333333333,0.25,0.20.16666666666666666666666,0.14285714285714285,0.125,0.1111111111111111,0.1]```#新款==零件制表器==Listorär en**datastruktur**:en komplex形式av data(jämfört med塔尔、索马恩卡拉)。En annan datastrukturär**标准**```(1,2)```En**tabell**är En lista av par.Härär n tabell av kvadrater公司:```[(x,x*x)|x<-[1..100]]```Och,lite-mer incressant:av kvadratrötter:```[(x,sqrt x)| x<-[1..100]]```直到范例出现为止。#新款==Delbarhet och伪造==När ett heltal delas med ett heltal,坎曼·福克沃滕med funktionen``div``och resten med``mod``:```前奏曲>div 13 52前奏曲>模块13 5```收件人:ett tal//m//är**delbart**med//n//betyder Att```mod m n==0```Ett tals**faktorer**är alla de tal som detär delbart med公司:```[n|n<-[1..m],mod m n==0]前奏曲>[n|n<-[1..123],模块123 n==0][1,3,41,123]```Ett**primtal**har inga andra faktorerän 1 och sig självt公司。赫尔斯卡vi uttrycka detta i Haskell?Låt oss prova!#新款==Ett delbarhetsbibliotek公司==Beräkna alla primfaktorer av talet 45678号。Det här blir risigt,även med listkom prehensioner公司。Nuär det dags att skriva ett litet**图书馆**,en fil medanvändbara funktitoner som har att göra med delbarhet:```模块Prime,其中可分m n=模m n==0因子m=[n|n<-[1..m],可除mn]素数m=m>1&&因子m==[1,m]素数因子m=[n|n<-因子m,素数n]```#新款==Primtest och faktortabellen公司==Vi laddar várt bibliotek i GHCi:```前奏曲>:l Prime.hs素数>素数因子45678[2,3,23,331]```Nyuppgify:skriv ut tabellen av alla tal frán 1至1000 ochderas primfaktorer公司。``` 素数>[(x,primeFactors x)|x<-[1..1000]][(1,[]),(2,[2]),(3,[3]),(4,[2]),(5,[5]),(6,[2,3]),(7,[7]),(8,[2]),(9,[3]),(10,[2,5]),(11,[11]),(12,[2,3]),(13,[13]),(14,[2,7]),(15,[3,5]),(16,[2]) ...```Obs:vár algoritm för att räkna primfaktorerär lángsam:senare kurser skalära ut bättre算法!#新款==Delbarhetsiblioteket医疗类型==För att dokumentera vad funktitionerna gör愤怒的男子med Fördel**typsignaturer**直到varje funktion:```模块Prime,其中可分割::Int->Int->Bool可分m n=模m n==0因子::Int->[Int]因子m=[n|n<-[1..m],可除mn]素数::Int->Bool素数m=m>1&&因子m==[1,m]主因子::Int->[Int]素数因子m=[n|n<-因子m,素数n]```#新款==Tvillingprimetal==Konjektur:Det finns oändligt många//p//sådana att både//p//och//p+2//är primtal公司。T.ex.3,5;5,7 ; 11,13 ; 17,19 ; ...Detta har varken bevisats eller motbevisats.德塔·哈尔·瓦尔肯·贝维萨斯·埃勒·莫特贝维萨茨。升级:Skriv ett Haskell program som generarra(den oändliga?)listan av所有tvillingprimital。#新款==提升机=====格式===Uppgifterna ska redovasis i en fil``Ex1.hs``,som serut sáhär:```模块Main,其中导入Primemain=做打印ex2打印ex3打印ex4打印ex5--定义erna av ex2,ex3,3x4,ex5,samt eventuella hjälpfunktitoner```När man kör kommandot先生```梯级Ex1```斯科里夫斯·洛斯宁加纳·帕斯克尔曼(rad för rad)。Hur``print``och``do``exakt fungerra kommer att förklaras(打印`och`做``exagt fungerar kommer at förlaras)i Föreläsning第三节。#新款===向上===1.Skriv och beräkna ett Haskell-utryck som anglet dagar轿车duöddes。2.Definera ett Haskell uttryck“ex2”,一位名叫tabellen的将军从华氏温度到华氏温度的konverteringar0,20,40,...,300人(20名分级员)。Konversionsformelnär:C=5(F-32)/9。T.ex.om F=86är C=30。3.Hur mánga primtal finns mellan 0 och 1000 respective 7000 och 8000?Definiera ett uttryck ``ex3``,som returnerar dessa som ett par。Du fár använda文件[``Prime.hs``Price.hs]som hjälp。4.Definiera ett Haskell-utryck“双胞胎”,som generar(den oändliga?)塔布伦大道所有tvillingprimital。Du får använda filen[`Prime.hs`Prime.hs]som hjälp公司。Definiera轿车ett uttryck ``ex4``,som ger de tio första帕伦。5.Skriv en funktion ``geom``,som approximerar den**几何级数**```1 + 1/2 + 1/4 + 1/8 + ... + 1/(2^n)+。。。```med ett heltal的一些论点。Skriv轿车ett uttryck ``ex5``,som gerlistan av approksimationerna med``n=1,。。。,10``.#新款==Sammanfattning och参考=====GHCi=Glasgow Haskell编译器交互式===启动GHCi med kommandot ``GHCi``Beräkna värdet av ett uttryck:我会提示Ladda en fil:``:l文件``帮助:``:``Avbryta beräkning:控制-CFöregáende kommando:堆积===哈斯克尔-菲勒===**模块标题**följd av eventuella**模块导入**följda av**函数定义器**med eller utan**典型签名人**:```模块Prime,其中导入列表可分割::Int->Int->Bool可分m n=模m n==0--ingen typsignatur(德国)因子m=[n|n<-[1..m],可除mn]```模块``Prime``ska finnas i filen``Prime.hs``。Undantag:om modulen heter``Main``kan filen heta vad som helst。瓦杰定义ska börja frán bör jan av en rad.Inget annatför placeras i början av en rad(förutom kommentarer)。Unix och旗下Det finns mága sätt att skapa och modifierra en filandra操作系统。De flesta数据记录器和Emacs**。Den kan从Unix-shellen med kommandot``emacs``开始。Döppnas ett fönster med menyer för att skapa,öppna och spara filer,osv。===打字机===Numeriska类型:-heltal:`Int``,med阳性或阴性heltal-flyttal(“卷轴”):``浮动``Sanningsvärden:``Bool``,医学目标``True``och``False``数据挖掘器:-列表器:``[a]``där``a``är en typ-par:``(a,b)``,där``a``och``b``är typerFunktitioner:``a->b``där``a``och``b``är typer-弗勒斯塔·利加(flerställiga)funktitoner skrivs som``a->b->c``===乌特里克===**Infixoperator**,med parenteser vid behov:``(2+3)*4>15``**Funktionsapplikationer**:``可除12 4``列表者:-**列表**:``[1,2,3]``-**范围**:`[1..100]``,`[1..]``,`[1,3..100]``-**listkomphrension**:``[x*x|x<-[1..100],偶数x]``===前奏曲===```--为数字类型定义(+)::(数字a)=>a->a->a(-)::(数字a)=>a->a->a(*)::(数字a)=>a->a->a(/)::(数字a)=>a->a->a(^)::(数字a)=>a->Int->a---a ^när a upphöjt till potens ndiv::Int->Int->Int修改::Int->Int->Intsqrt::浮点->浮点--为具有相等性的类型定义(==)::(方程式a)=>a->a->Bool(/=)::(方程式a)=>a->a->Bool(<)::(方程式a)=>a->a->Bool(>)::(方程式a)=>a->a->Bool(&&)::布尔->布尔->布尔(||)::布尔->布尔->布尔偶数::Int->Bool奇数::Int->Bool总和::(数字a)=>[a]->a产品::(数字a)=>[a]->a长度::[a]->Int取::Int->[a]->[a```