Arvutiteaduse instituut
  1. Kursused
  2. 2019/20 sügis
  3. Programmeerimiskeeled (MTAT.03.006)
EN
Logi sisse

Programmeerimiskeeled 2019/20 sügis

  • Info
  • Õppekava
  • Moodle
  • Loengud & Praksid
  • Lisamaterjalid
  • Küsi abi! (Fleep)

Kolmas kodutöö

1. Ülesanne (2/5 punkti)

Kirjuta listi ümberpööramise funktsioon reverse', kasutades foldl-i.

Näiteks:

reverse [] ==> []
reverse [1,2,3] ==> [3,2,1]
reverse' :: [a] -> [a]
reverse' = foldl (#) a
  where
    a = undefined
    x # y = undefined

2. Ülesanne (2/5 punkti)

Kirjuta foldr-ga funktsioon eemaldaNullid, mis eemaldab listist kõik nullid. Teised listi elemendid peavad jääma samasse järjekorda.

eemaldaNullid []           ==> []
eemaldaNullid [1,0,1,0,2]  ==> [1,1,2]
eemaldaNullid [1,1,0,0,2]  ==> [1,1,2]
eemaldaNullid [0,0,0,6,0]  ==> [6]
eemaldaNullid :: [Int] -> [Int]
eemaldaNullid = foldr (#) a
  where
    a = undefined
    x # y = undefined

3. Ülesanne (2/5 punkti)

Kasutades foldr-i, kirjuta funktsioon any, mis võtab argumendiks predikaadi ja listi. Tagasta True ainult siis, kui leidub listi elemendt, mis rahuldab predikaati. (Vihje: || on disjunktsiooni operaator)

Näiteks:

any isUpper "Tere!" == True   -- kuna isUpper 'T' == True
any isUpper "terE!" == True   -- kuna isUpper 'E' == True
any isUpper "tere!" == False
any :: (a -> Bool) -> [a] -> Bool
any f xs = undefined

4. Ülesanne (2/5 punkti)

Kirjuta funktsioon allEqual, mis kontrollib, kas täisarvude listi kõik elemendid on võrdsed.

allEqual []      ==> True
allEqual [1,2]   ==> False
allEqual [1,1,1] ==> True
allEqual [1,2,1] ==> False
allEqual :: [Int] -> Bool
allEqual xs = undefined

5. Ülesanne (2/5 punkti)

Kasutades funktsiooni foldr, kirjuta unzip' funktsioon. Unzip' jagab paaride listi kaheks eraldi listiks.

unzip' [(1,'x'), (4,'1'), (2,'p')] == ([1, 4, 2], ['x', '1', 'p'])
unzip' [] == ([], [])
unzip' :: [(x, y)] -> ([x], [y])
unzip' = foldr f b
  where
   b = undefined 
   f = undefined 
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused