Någon som kan programmerings språket Haskell????
Läser en kurs i programmering på högskolan och vi har nu kommit till Haskell. Jag förstår ingenting och skulle behöva lite hjälp med min labb. Om det är någon som kan haskell kanske ni kan kika på uppgifterna och ge mig lite tips...jag har kört fast totalt. Har lyckats att klara uppgift 1 a men kommer inte längre.
1 b) Antag nu att vi har valt att representera mängder som listor. Det vi nu skall göra är att skapa funktioner som motsvarar snitt (intersection) och union. Snittet av två mängder utgörs av en lista med de element som finns med i båda listorna. Unionen av två mängder utgörs av en lista med de element som finns med i minst en av de två mängderna. Observera att varken snittmängden eller unionsmängden får innehålla några dubbletter. Vi kan anta att argumenten till våra funktioner intersection och union uppfyller vårt krav på mängder, d.v.s. argumenten är listor utan dubbletter. Koda funktionerna intersection och union. (Obs: Ni måste kalla funktionerna t.ex. intersection_ respektive union_ så de inte krockar med inbyggda funktionsnamn.)
Exempel: intersection [1,4,6] [1,3,4,2] => [1,4]
union [1,4,6] [1,3,4,2,3] => [1,2,3,4,6]
c) Nu skall ni koda en funktion, låt oss kalla den foo1, som tar in ett element x och en lista xs för att skapa en ny lista ys. Den nya listan skall bestå av lika många förekomster av elementet x som det finns i listan ys.
Exempel: foo1 1 [2,1,2,1,4,1] => [1,1,1]
foo1 4 [2,1,2,1,4,1] => [4]
d) Nästa steg är att göra en lite mer avancerad variant av foo1 kallad foo2. foo2 är en polymorf högre ordningens funktion eftersom den som första element tar in en funktion av typen a- > b - > Bool. Denna funktion används för att testa elementet (x enligt ovan) mot varje element i listan xs för att producera ys, som då förstås skall bestå av alla element i xs som ?klarade? testet. Om vi låter funktionen vara (==) får vi vår funktion foo1 i förra uppgiften.
Exempel: foo2 (==) 2 [1,2,4,2,5] => [2,2]
foo2 ( [4,5]
foo2 (>) 2 [1,2,4,2,5] => [1]
foo2 ( ['c','d']
Uppgift 2:
I denna uppgift skall vi koda sorteringsfunktionen mergesort. I den utdelade filen finns en funktion för att skapa en lista med slumptal, kallad randList1. Genom att anropa t.ex. randList 10 fås en lista med 10 slumptal. I den utdelade filen finns även en implementering av sorteringsfunktionerna insertionsort (isort) och quicksort (qsort) med. Detta är för att ni skall kunna pröva de funktionerna, och även se hur de är uppbyggda.
a) Innan vi kodar själva mergesort måste vi skriva en funktion merge, vilken tar in två sorterade listor och slår ihop dessa. Merge jobbar genom att hela tiden jämföra respektive huvud och lägga in det minsta i resultatet av att köra merge på resten av de båda listorna.
Exempel: merge [1,2,4] [3,7] => [1,2,3,4,7]
b) Nu är vi helt klara att koda mergesort! Skriv först de båda basfallen dvs. vad ger en tom lista respektive en lista med bara ett element. Som bekant säger sedan rekursionen att vi skall ta merge på resultatet av att mergesortera de båda halvorna. (Tips: För att dela upp listan kan take och drop användas.)
1 randlist är egentligen ett bedrövligt hack, som utnyttjar osäkra delar av Haskell. Dock hade det blivit betydligt mer kryptiskt om det skulle gjorts på korrekt Haskell-vis, eftersom vi inte gått igenom några IO-funktioner.