Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
exam [2020/09/03 09:24]
pdmatei created
exam [2020/09/04 10:22] (current)
pdmatei
Line 1: Line 1:
-1. Scrieti o functie in Haskell care primeste un numar natural $math[n] si intoarce ​functie $math[f_n(x= 2x+1] daca $math[n] este par si $math[f_n(x) = x-3] daca $math[n] este impar.+1. Scrieti o functie in Haskell care verifica daca doua liste contin exact aceleasi elemente ​(nu neaparat in ordine).
  
-2. Scrieti un predicat in Prolog care verifica daca doua liste au exact aceleasi elemente (nu neaparat in aceeasi ordine).+2. Scrieti un predicat in Prolog care verifica daca **toate** elementele unei liste sunt pozitive.
  
-3. Dati un exemplu de lambda-expresie care nu se poate reduce ​folosind ​evaluarea ​normala, ​dar care se poate reduce in exact doi pasi (la o expresie ​ireductibilafolosind evaluarea aplicativa.+3. Evaluati, ​folosind ​strategiile ​normala ​si aplicativaurmatoarea lambda-expresie ​$math[(\lambda x.(x\;(x\;x))\; (\lambda z.x\;​\lambda x.z))].
  
-4. Folosind tipul de date ''​Query'',​ definiti o interogare care selecteaza ocupatia pentru toti utilizatorii care au user_id-ul ​intre 15 si 45 si au numele care incepe ​cu litera ''​M''​ sau litera ''​N''​.+4. Folosind tipul de date ''​Query'',​ definiti o interogare care selecteaza ocupatia pentru toti utilizatorii care au varsta ​intre 15 si 45 sau au numele ​formate din cuvinte ​care incep cu litera ''​Q''​ sau litera ''​F''​.
  
-5. Definiti tipul de date ''​TNodeTrie'' ​al arborilor de cautare in care fiecare muchie ​este encodata ​cu un caracterScrieti o functie care primeste ​un ''​String''​ si un arbore cu acest tip de noduri si returneaza daca poate fi format acel ''​String''​ prin parcurgerea acelui arbore.+5. Definiti tipul de date ''​Sentence''​care codifica propozitii dupa urmatoarele reguli: 
 +  * o propozitie ​este formata dintr-un **subiect** si un **obiect** 
 +  * un subiect este **un nume propriu** format din unul, doua sau trei string-uri care incep cu majuscula. 
 +  * un obiect este un **predicat** (String) urmat de unul sau mai multe adjective (String-uri).
  
-<code haskell>​ +Scrieti o functie care primeste un ''​String'',​ si intoarce un obiect ''​Sentence''​. Puteti presupune ca string-ul este format corect.
-TrieSearch :: String -> TNodeTrie -> Bool +
-</​code>​+
  
-Eg. +6Scrieti un predicat in Prolog care primeste ​lista ''​L''​ si construieste **lista tuturor rotatiilor** listei ​''​L''​. ​Lista tuturor rotatiilor listei ​''​[1,2,3]'' ​este ''​[[1,2,3],[2,3,1],[3,1,2]]''​.
-<​code>​ +
-          . +
-     ​a/ ​ b|  c\ +
-    .          . +
- ​c/ ​ e\  a|   o+
- ​. ​    ​. ​ .    . +
-              t| +
-               . +
-</​code>​ +
-String-uri posibile in acest arbore: a, ac, ae, b, ba, c, co, cot. +
- +
-6. Consideram formule **SAT** codificate folosind predicatele ​''​and/​2'',​ ''​or/​2''​ si ''​not''​. ​Spre exemplu: ​''​and(not(X),or(Y,not(Z)))'',​ codifica formula $math[\lnot X \wedge (Y \vee \lnot Z)]. Scrieti un predicat ​''​sat'' ​care construieste toate interpretarile variabilelor care satisfac formula. Exemplu: +
- +
-<code Prolog>​ +
-?- sat(and(not(X),or(Y,not(Z))). +
- +
-X = 0Y = 1Z = 0; +
-X = 0Y = 1, Z = 1+
-X = 0Y = 0, Z = 0; +
-</​code>​+