Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Funktsionaalprogrammeerise meetodid - eksami näidisülesanded
[go: Go Back, main page]

Funktsionaalprogrammeerise meetodid

Eksami näidisülesanded


Ülesanne 1

Kirjutada funktsioon, mis saades argumendiks listi, väljastab selle kõikvõimalikud alamjadad.

> subs :: [a] -> [[a]]

Näiteks:

subs []     ==> [[]]
subs [1]    ==> [[1],[]]
subs [1..3] ==> [[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]


Ülesanne 2

Kirjutada funktsioon, mis saades argumendiks listi,  väljastab selle kõikvõimalikud permutatsioonid.

> perms :: [a] -> [[a]]

Näiteks:

perms []     ==> [[]]
perms [1]    ==> [[1]]
perms [1..3] ==> [[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]


Ülesanne 3

Kirjutada funktsioon, mis saades argumendiks täisarvu, väljastab selle pikkusega kõikvõimalikud binaarsed stringid.

> bins :: Int -> [String]

Näiteks:

bins 0 ==> [""]
bins 1 ==> ["0","1"]
bins 2 ==> ["00","01","10","11"]


Ülesanne 4

Olgu funktsioon twice defineeritud järgnevalt:

twice f = f . f

Redutseerida allpool toodud avaldis normaalkujule kasutades normaaljärjekorda / aplikatiivset järjekorda / laiska väärtustamist.

twice twice (+1) 2


































Ülesannete lahendused


Ülesanne 1

subs []     = [[]]
subs (x:xs) = map (x:) subsxs ++ subsxs
              where subsxs = subs xs


Ülesanne 2

perms []     = [[]]
perms (x:xs) = concat (map (between x) (perms xs))
               where between x [] = [[x]]
                     between x (y:ys) = (x:y:ys) : map (y:) (between x ys)


Ülesanne 3

bins 0     = [""]
bins (n+1) = ['0':bs | bs <- bss] ++ ['1':bs | bs <- bss]
             where bss = bins n


Ülesanne 4

Siin on lahendus toodud normaaljärjekorra jaoks:

    twice twice (1+) 2
--> (twice . twice) (1+) 2
--> twice (twice (1+)) 2
--> (twice (1+) . twice (1+)) 2
--> twice (1+) (twice (1+) 2)
--> ((1+) . (1+)) (twice (1+) 2)
--> (1+) ((1+) (twice (1+) 2))
=== 1 + (1 + (twice (1+) 2))
--> 1 + (1 + ((1+) . (1+)) 2)
--> 1 + (1 + ((1+) ((1+) 2)))
=== 1 + (1 + (1 + (1 + 2)))
==> 6