Export translations
Jump to navigation
Jump to search
Settings
Group
FP Homework 1
FP Laboratory 1
FP Laboratory 10
FP Laboratory 11
FP Laboratory 12
FP Laboratory 2
FP Laboratory 3
FP Laboratory 4
FP Laboratory 5
FP Laboratory 6
FP Laboratory 7
FP Laboratory 9
Functional programming
Main Page
Language
aa - Afar
ab - Abkhazian
abs - Ambonese Malay
ace - Achinese
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
ak - Akan
aln - Gheg Albanian
am - Amharic
an - Aragonese
ang - Old English
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bcl - Central Bikol
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bg - Bulgarian
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cr - Cree
crh - Crimean Turkish
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - español (formal)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
ff - Fulah
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gag - Gagauz
gan - Gan Chinese
gan-hans - Gan (Simplified)
gan-hant - Gan (Traditional)
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
grc - Ancient Greek
gsw - Swiss German
gu - Gujarati
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
ht - Haitian Creole
hu - Hungarian
hu-formal - magyar (formal)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Maori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mni - Manipuri
mnw - Mon
mo - Moldovan
mr - Marathi
mrj - Western Mari
ms - Malay
mt - Maltese
mus - Creek
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
niu - Niuean
nl - Dutch
nl-informal - Nederlands (informeel)
nn - Norwegian Nynorsk
no - Norwegian
nov - Novial
nrm - Norman
nso - Northern Sotho
nv - Navajo
ny - Nyanja
nys - Nyungar
oc - Occitan
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
qqq - Message documentation
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rm - Romansh
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
sa - Sanskrit
sah - Sakha
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - cебертатар
su - Sundanese
sv - Swedish
sw - Swahili
szl - Silesian
ta - Tamil
tay - Tayal
tcy - Tulu
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tn - Tswana
to - Tongan
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
war - Waray
wo - Wolof
wuu - Wu Chinese
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yue - Cantonese
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Fetch
{{DISPLAYTITLE:FP Cvičení 7}}== Seznamy seznamů == <div style="float: right"> [[File:Video logo.png|80px|link=https://youtu.be/voiTk64SaQM]]</div> Uvažujte následující typ reprezentující obrázek: <syntaxhighlight lang="Haskell">type Pic = [String]</syntaxhighlight> Pro tisk obrázku využijte následující funkci: <syntaxhighlight lang="Haskell"> pp :: Pic -> IO () pp x = putStr (concat (map (++"\n") x)) </syntaxhighlight> Příklad obrázku: <syntaxhighlight lang="Haskell"> pic :: Pic pic = [ "....#....", "...###...", "..#.#.#..", ".#..#..#.", "....#....", "....#....", "....#####"] </syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp pic ....#.... ...###... ..#.#.#.. .#..#..#. ....#.... ....#.... ....##### </syntaxhighlight> Implementujte následující funkce: * Funkce, která otočí obrázek vertikáně a horizontálně <syntaxhighlight lang="Haskell"> flipV :: Pic -> Pic flipH :: Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(flipV pic) ....#.... ...###... ..#.#.#.. .#..#..#. ....#.... ....#.... #####.... *Main> pp(flipH pic) ....##### ....#.... ....#.... .#..#..#. ..#.#.#.. ...###... ....#.... </syntaxhighlight> <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> <syntaxhighlight lang="Haskell"> flipV :: Pic -> Pic flipV = map reverse flipV' :: Pic -> Pic flipV' xs = [reverse x|x<-xs] flipH :: Pic -> Pic flipH = reverse </syntaxhighlight> [[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/DQJNA44418]] </div> <div style="clear:both"></div> * Funkce, která na sebe položi dva obrázky. <syntaxhighlight lang="Haskell">above :: Pic -> Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(above pic pic) ....#.... ...###... ..#.#.#.. .#..#..#. ....#.... ....#.... ....##### ....#.... ...###... ..#.#.#.. .#..#..#. ....#.... ....#.... ....##### </syntaxhighlight> <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> <syntaxhighlight lang="Haskell"> above :: Pic -> Pic -> Pic above x y = x ++ y </syntaxhighlight> [[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/VTCE65032]] </div> <div style="clear:both"></div> *Funkce, která položí vedle sebe dva obrázky (uvažujte že obrázky mají stejnou výšku). <syntaxhighlight lang="Haskell">sideBySide :: Pic -> Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(sideBySide pic pic) ....#........#.... ...###......###... ..#.#.#....#.#.#.. .#..#..#..#..#..#. ....#........#.... ....#........#.... ....#####....##### </syntaxhighlight> <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> <syntaxhighlight lang="Haskell"> sideBySide :: Pic -> Pic -> Pic sideBySide xs ys = map (\(x,y) -> x ++ y)(zip xs ys) sideBySide':: Pic -> Pic -> Pic sideBySide' (x:xs) (y:ys) = (x ++ y) : sideBySide' xs ys sideBySide' _ _ = [] sideBySide'' :: Pic -> Pic -> Pic sideBySide'' = zipWith (++) </syntaxhighlight> [[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/VTCE65032]] </div> <div style="clear:both"></div> *Funkce, která otočí obrázek doprava a doleva. <div style="float: right"> [[File:Video logo.png|80px|link=https://youtu.be/l9qIHTFsEV0]] </div> <syntaxhighlight lang="Haskell"> rotateR :: Pic -> Pic rotateL :: Pic -> Pic </syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(rotateR pic) ....... ...#... ....#.. .....#. ####### #....#. #...#.. #..#... #...... *Main> pp(rotateL pic) ......# ...#..# ..#...# .#....# ####### .#..... ..#.... ...#... ....... </syntaxhighlight> <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> <syntaxhighlight lang="Haskell"> toRow :: String -> Pic toRow xs = map (\x -> [x]) xs -- [[x]|x<-xs] rotateR :: Pic -> Pic rotateR [x] = toRow x rotateR (x:xs) = (rotateR xs) `sideBySide` (toRow x) rotateR' :: Pic -> Pic rotateR' x = foldl1 sideBySide (reverse (map toRow x)) rotateL :: Pic -> Pic rotateL [x] = reverse(toRow x) rotateL (x:xs) = reverse(toRow x) `sideBySide` (rotateL xs) rotateL' :: Pic -> Pic rotateL' x = foldl1 sideBySide (map (reverse.toRow) x) </syntaxhighlight> [[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/JXX12735]] </div> <div style="clear:both"></div> * Funkce, která každý bod v obrázku zvětší n-krát. <syntaxhighlight lang="Haskell">zoom :: Int -> Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(zoom 2 pic) ........##........ ........##........ ......######...... ......######...... ....##..##..##.... ....##..##..##.... ..##....##....##.. ..##....##....##.. ........##........ ........##........ ........##........ ........##........ ........########## ........########## </syntaxhighlight> <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> <syntaxhighlight lang="Haskell"> zoom :: Int -> Pic -> Pic zoom n xs = [concat(map (replicate n) x)|x<-concat (map (replicate n) xs)] </syntaxhighlight> [[File:Tryit.png|center|60px|Try it!|link=https://rextester.com/TNVRI28767]] </div> <div style="clear:both"></div> == Doplňková cvicení == Vezmeme následující doplňkový obrázek: <syntaxhighlight lang="Haskell"> pic2::Pic pic2 = [ "#########", "#.......#", "#.......#", "#.......#", "#.......#", "#.......#", "#########"] </syntaxhighlight> * Vytvorte funkci, která provede superpozici dvou obrázku. <syntaxhighlight lang="Haskell">superimpose :: Pic -> Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(superimpose pic pic2) ######### #..###..# #.#.#.#.# ##..#..## #...#...# #...#...# ######### </syntaxhighlight> * Vytvorte funkci, která invertuje "barvy" v daném obrázku. <syntaxhighlight lang="Haskell">invertColors :: Pic -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(invertColors pic) ####.#### ###...### ##.#.#.## #.##.##.# ####.#### ####.#### ####..... </syntaxhighlight> * Vytvořte funkci, která pro zadané celé číslo n vytvoří šachovnici o rozměrech n x n. <syntaxhighlight lang="Haskell">chessBoard :: Int -> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(chessBoard 5) #.#.# .#.#. #.#.# .#.#. #.#.# *Main> pp(chessBoard 10) .#.#.#.#.# #.#.#.#.#. .#.#.#.#.# #.#.#.#.#. .#.#.#.#.# #.#.#.#.#. .#.#.#.#.# #.#.#.#.#. .#.#.#.#.# #.#.#.#.#. </syntaxhighlight> * Definujte funkci <code>makePicture</code>, kde argumentem funkce je seznam pozic černých bodů (reprezentovaných znakem <code>'#'</code>) a dva celočíselné argumenty udávají šírku a výšku obrázku. <syntaxhighlight lang="Haskell">makePicture :: Int -> Int -> [(Int,Int)]-> Pic</syntaxhighlight> <syntaxhighlight lang="Haskell" class="myDark"> *Main> pp(makePicture 7 5 [(1,3),(3,2)]) ....... ...#... ....... ..#.... ....... </syntaxhighlight>
Navigation menu
Personal tools
English
Log in
Namespaces
Special page
Variants
Views
More
Search
Main page
Education
Functional programming
Functional programming - presentations
Functional programming - laboratories
Programming Languages and Compilers
Practical Functional Programming
History Entries
Programming paradigms
C#
Tools
Special pages
Printable version