1. Position (5p) Definera en funktion som givet ett par med en lista l

1. Position
(5p)
Definera en funktion som givet ett par med en lista l och ett heltal n ger tillbaka det
element ur l som förekommer på position n. Huvudet i en lista finns på position 1,
nästa element på position 2 osv. Korrekt angiven generell typ ger 2 poäng.
2. Matriser
En lista är en n × m-matris om den innehåller n dellistor som alla har m element
samtidigt som både n och m är större än noll.
a) Definiera en funktion som givet en n × m-matris ger paret (n, m) som resultat.
(2p)
b) Definera en funktion som givet en lista (av typen [[t]]) avgör om den är en
n × m-matris.
(3p)
3.
a) Definiera en algebraisk typ T key info för binära träd med tomma löv och
noder som utöver delträd även innehåller par med komponenter av typen key
och info.
(2p)
b) Ett träd av typen T key info är balanserat om det är ett löv eller om det är
en nod med balanserade underträd vars antal löv skiljer sig åt med högst 1.
Definiera en funktion mkTree :: [(key,info)] -> T key info som givet
en lista med par ger som resultat ett balanserat träd innehållande listans
element.
(3p)
Det kan vara lämpligt att först definiera en funktion som delar upp en icketom lista i ett element och två dellistor vars längder skiljer sig åt med högst
1. Du får använda funktioner ur andra uppgifter även om du inte lyckats
definiera dem. (Obs! Paren i träden behöver inte vara ordnade på något
sätt.)
4. Stora tal
(5p)
Ett sätt att implementera godtyckligt stora naturliga tal (dvs positiva heltal) är att
använda heltalslistor vars element utgörs av de enskilda siffrorna i de stora talen.
Talet 1 392 715 900 000 (Sveriges statsskuld vid tusenårsskiftet i kronor räknat)
representeras då av listan [1,3,9,2,7,1,5,9,0,0,0,0,0].
Definiera en funktion add :: [Int] -> [Int] -> [Int] som adderar två stora tal
givna som listor.
Ex: add [1,7,0,6,0] [3,5,6,7] ska bli [2,0,6,2,7] :: [Int].
5. Träd
(5p)
Ett binärt träd är balanserat om det är ett löv, eller om skillnaden i djup mellan
vänster och höger delträd i en nod är högst 1 och båda delträden är balanserade.
Definiera en typ för binära träd med heltal i noder och löv och en funktion som
avgör om ett sådant träd är balanserat.
Med ett träds djup menas antalet noder den längsta vägen från roten ut till ett löv
innehåller. Ett träd som endast består av ett löv har djupet 0.
6. Ett polynom med en variabel, tex
2.5x3 − 3.0x2 + 42.0
är entydigt bestämt av koefficienterna framför de olika x–potenserna. Polynomet
ovan bestäms av att koefficienterna i tur och ordning är 2.5, −3.0, 0.0 och 42.0. För
att representera ett polynom i ML deklarerar vi en datatyp POLYNOM så här:
data POLYNOM = Polynom [Int]
a) Deklarera en funktion value at som tar ett polynom och ett x-värde, och ger
som svar polynomets värde i den punkten.
(4p)
4
2
b) Deklarera ett värde p som representerar polynomet x + x + 1.
(0.5p)
c) Använd på lämpligt sätt value at för att beräkna p:s värde i punkten 1.0.
Det räcker med att skriva ner hur du skulle applicera funktionen på argumentet/en.
(0,5p)
7. Skriv en funktion suffixlist som givet en lista l ger som resultat en lista med alla
icke-tomma dellistor som avslutar l. Exempel:
suffixlist [4,1,3] ger resultatet [[4,1,3],[1,3],[3]]:int list list
suffixlist ["s","t","o","r"] ger resultatet
[["s","t","o","r"], ["t","o","r"], ["o","r"], ["r"]]:string list list
suffixlist nil ger avbruten evaluering (med abortwith) och en felutskrift, eftersom en tom lista inte innehåller någon (avslutande) icke-tom dellista.
Namnet på funktionen kommer från att en avslutande dellista kallas för suffix. (5p)
8. Multiplicera mera
(5p)
4:ans multiplikationstabell ser ut så här:
1 * 4 = 4
2 * 4 = 8
3 * 4 = 12
4 * 4 = 16
5 * 4 = 20
6 * 4 = 24
7 * 4 = 28
8 * 4 = 32
9 * 4 = 36
10 * 4 = 40
Vi representerar denna tabell med den 10 heltal långa listan
[4,8,12,16,20,24,28,32,36,40]. På motsvarande vis representerar vi andra multiplikationstabeller.
Skriv en funktion multitab :: Int -> Int -> [[Int]] som givet två heltal x och
y ger som resultat listan med multiplikationstabeller från x:ans till y:ans.
Exempel:
multitab 4 6 ska bli
[ [4,8,12,16,20,24,28,32,36,40], [5,10,15,20,25,30,35,40,45,50],
[6,12,18,24,30,36,42,48,54,60] ].
9. Delsumma
(5p)
Skriv en funktion f som givet ett heltal x och en lista l med heltal avgör om det
finns någon delmängd av element ur l vars summa är x. Den tomma delmängden
har summan 0.
Exempel:
f 3 [7,6,12,4,-9,8] ska vara True ty vi har exempelvis 3 = 12 + (−9).
f 10 [7,-1,0,13] ska (liksom f 10 []) vara False ty det finns ingen delmängd
av element ur listan vars summa blir precis 10.