Documente Academic
Documente Profesional
Documente Cultură
1. Un sir de caractere xs care se obtine dintr-un alt sir de caractere ys prin eliminarea
unora dintre caracterele acestuia (si pastrarea celor ramase in aceeasi ordine) il
vom numi subcuvant al lui ys.
Exemple:
i. “Hkl” este un subcuvant al sirului “Haskell”
ii. “145” este un subcuvant al sirului “12345”
b. Definiti o functie subCuvinte::String->[String] care returneaza lista
tuturor subcuvintelor sirului de caractere primit ca argument.
Exemplu de apel al functiei:
i. subCuvinte ”has”
[””, ”h”, ”a”, ”s”, ”ha”, ”as”, ”hs”, ”has”]
c. Definiti o functie estesubCuvant::String->String->Bool care primeste
doua siruri de caractere ca argumente si returneaza True, daca primul este
subbcuvant al celui de-al doilea si False, in caz contrar. Scrieti doua
variante: prima, folosind functia elem, din biblioteca Prelude si functia
subCuvinte-ea are dezavantajul ca necesita un numar foarte mare de
verificari (cate, pentru un sir xs avand lungimea n?); cea de-a doua
directa.
d. Scrieti un program care sa preia de la tastatura doua siruri de caractere si
sa afiseze daca primul sir este un subcuvant al celui de-al doilea.
2. a) Mutand orice numar de elemente de la inceputul unei liste la sfarsitul ei
obtinem un numar de noi liste pe care le vom numi rotatii ale listei initiale. Scrieti
o functie rotatii::[a]->[[a]], care returneaza o lista cu toate rotatiile listei primite
ca argument.
Exemplu de apel: rotatii [1,2,3,4]==[[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]].
b) O rotatie a titlului unei carti este o rotatie a cuvintelor din titlu, dar care nu
incepe cu un cuvant de legatura, acestea fiind sirurile de caractere
“in”,”din”,”sau”,”si”,”o”,”un”. Definiti o functie rotatiiTitlu::String->[String],
care “intoarce” toate rotatiile asociate titlului unei carti.
Exemplu de apel:
rotatiiTitlu “Un veac de singuratate”==[”veac de singuratate Un”,”singuratate
Un veac de”].
c) In anumite situatii dorim sa gasim intr-o baza de date, titlul unei carti care
contine un cuvant cheie. Pentru aceasta scrieti o functie
indexTitluri::[String]->[String], care returneaza o lista cuprinzand toate
rotatiile titlurilor de carti primite in lista argument, sortata crescator dupa prima
litera.
De exemplu :
indexTitluri [“Un veac de singuratate”,”Un tramvai numit dorinta”]==[”dorinta
Un tramvai numit”,” singuratate Un veac de”, ”tramvai numit dorinta Un”,” veac
de singuratate Un”].
d) Scrieti o functie cautareTitlu::[String]->String->[String], care primeste ca
argumente o lista de valori de tip String (reprezentand o lista de titluri-baza de
date) si un cuvant cheie ca un String si returneaza o lista cuprinzand toate titlurile
care contin acest cuvant.
3.
a. Definiti o functie pal::(a->Bool)->[a]->([a],[a]) care primeste doua
argumente: un predicat p si o lista xs si returneaza o pereche de doua liste
ys si zs astfel incat:
i. xs=ys++zs
ii. fiecare element al listei ys satisface p
iii. primul element al lui zs nu satisface p
Exemplu: pal isLower “casa Bolta Rece” va returna
(“casa”,”Bolta Rece”)
sau pal (>4) [5,6,7,1,2,3,4] va returna ([5,6,7],[1,2,3,4])
b. Definim un cuvant ca fiind un sir de caractere alphanumerice consecutive.
Scrieti o functie
esteCuvant::String->Bool care returneaza True sau False dupa cum sirul
argument este un cuvant sau nu.
c. Definiti o functie cuvinte::String->[String] care “intoarce” lista
cuvintelor maximale gasite in sirul primit ca argument.
Exemplu: apelul cuvinte “abcd2xyz7defgh” va returna lista
[“abcd”,”xyz”,”defgh”]
d. Realizati un program care preia de la tastatura un sir de caractere si
afiseaza, pe linii diferite, toate cuvintele care se gasesc in acest sir.
4. Declarati un tip sinonim cu String numit Nume si un tip sinonim cu Int numit
Nota. Definiti apoi un tip Catalog sinonim cu [(Nume,Nota)].