Övningar för vecka 5
Börja med att göra övningarna 9.2, 9.7 och 9.8 i boken.
1. Stavningskontroll.
I program för stavningskontroll jämförs alla ord i användarens text
med orden i en ordlista; de ord som inte finns i ordlistan
markeras som potentiellt felstavade. En mycket förenklad form av sådan
kontroll är då funktionen
unknownWords :: [String] -> [String] -> [String]
där unknownWords dictionary usertext är listan av alla ord i
usertext som inte ingår i dictionary. Definiera
denna funktion i två versioner:
- utan speciella antaganden om dictionary;
- om man kan anta att dictionary är sorterad.
2. Delord
Definiera en funktion som tar ett "ord" (en sträng) som argument och
producerar listan av alla delord till detta ord (där ett delord
fås genom att stryka noll eller flera bokstäver i det ursprungliga ordet).
Main> subWords "apa"
["","a","p","pa","a","aa","ap","apa"]
Main>
Notera att 'ordet' "a" förekommer två gånger eftersom det kan
åstadkommas på två sätt (antingen stryks de två första eller de två
sista bokstäverna). Hur modifierar man funktionen så att dubbletter
inte förekommer? Hur många elements har subWords cs i den
omodifierade varianten?
3. Punkter i planet
Vi representerar punkter i planet med par av flyttal:
type Point = (Float,Float)
Avståndet mellan två punkter kan beräknas med avståndsformeln:
distance :: Point -> Point -> Float
distance (x1,y1) (x2,y2) = sqrt((x1-x2)^2 + (y1-y2)^2)
- Definiera en funktion
allDistances :: Point -> [Point] -> [Float]
sådan att allDistances p ps är listan av alla avstånd mellan
punkten p och punkterna i ps.
-
Definiera en funktion
distantPoints :: Float -> [Point] -> [Point]
sådan att distantPoints x ps innehåller alla de punkter i
ps som ligger på avstånd minst x från origo.
- (Svårare) Definiera en funktion
shortestDistance :: [Point] -> Float
som ger det kortaste avståndet mellan två punkter i argumentlistan
(observera att dessa två punkter inte måste stå intill varandra i
listan). Vad bör man göra om listan innehåller mindre än två punkter?
Du kan behöva hjälpfunktionen minimum som tar en icke-tom
lista av tal som argument och ger det minsta talet som resultat.
Denna funktion finns i preluden, men definiera den gärna själv som
övning.
4. Perfekta tal
Ett perfekt tal är ett positivt heltal sådant att summan
av dess äkta delare är lika med talet självt. En äkta delare
till ett heltal n är ett tal k så att k < n och n är jämnt
delbart med k. Med dessa definitioner ser vi att 6 är perfekt ty
6 = 1+2+3. Bestäm alla perfekta tal <= 1000.