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
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