This shows you the differences between two versions of the page.
|
pp:24:laboratoare:tda [2026/02/12 15:03] mihaela.balint [Exemple de gândire] |
pp:24:laboratoare:tda [2026/02/12 15:20] (current) mihaela.balint [Exerciții] |
||
|---|---|---|---|
| Line 87: | Line 87: | ||
| ==== Exemple de gândire ==== | ==== Exemple de gândire ==== | ||
| - | === nth'' (al n-lea element din listă) === | + | <code haskell> |
| + | nth (al n-lea element din listă) | ||
| + | </code> | ||
| **Întrebare**: Pe ce variabile fac recursivitate? \\ | **Întrebare**: Pe ce variabile fac recursivitate? \\ | ||
| **Raționament**: A identifica al ''n''-lea element din ''L'' înseamnă a identifica al ''(n-1)''-lea element din ''tail(L)''. \\ | **Raționament**: A identifica al ''n''-lea element din ''L'' înseamnă a identifica al ''(n-1)''-lea element din ''tail(L)''. \\ | ||
| - | **Concluzie**: Pe numărul $n$ și pe lista $L$. \\ | + | **Concluzie**: Pe numărul ''n'' și pe lista ''L''. |
| <code haskell> | <code haskell> | ||
| - | Axiome (cod) | + | -- Axiome (cod) |
| - | ------------ | + | nth(null, n) = eroare |
| - | nth(null, n) = eroare | + | |
| nth(cons(x, L), zero) = x | nth(cons(x, L), zero) = x | ||
| nth(cons(x, L), succ(n)) = nth(L, n) | nth(cons(x, L), succ(n)) = nth(L, n) | ||
| Line 101: | Line 103: | ||
| + | <code haskell> | ||
| + | duplicate (duplicarea fiecărui element al listei) | ||
| + | </code> | ||
| - | === duplicate (duplicarea fiecărui element al listei) === | ||
| **Notă**: Există un singur parametru (''L''), deci o singură variabilă pe care pot face recursivitate. \\ | **Notă**: Există un singur parametru (''L''), deci o singură variabilă pe care pot face recursivitate. \\ | ||
| **Întrebare**: Cum transform rezultatul pentru ''tail(L)''? \\ | **Întrebare**: Cum transform rezultatul pentru ''tail(L)''? \\ | ||
| - | **Raționament**: Dacă am duplicat toate elementele din ''tail(L)'', trebuie doar să adaug de două ori ''head(L)'' la început. \\ | + | **Raționament**: Dacă am duplicat toate elementele din ''tail(L)'', trebuie doar să adaug de două ori ''head(L)'' la început. |
| <code haskell> | <code haskell> | ||
| - | Axiome (cod) | + | -- Axiome (cod) |
| - | ------------ | + | |
| duplicate(null) = null | duplicate(null) = null | ||
| duplicate(cons(x, L)) = cons(x, cons(x, duplicate(L))) | duplicate(cons(x, L)) = cons(x, cons(x, duplicate(L))) | ||
| </code> | </code> | ||
| - | |||
| ===== Exerciții ===== | ===== Exerciții ===== | ||
| * Demonstrați prin inducție structurală proprietatea ''len(app(A, B)) = add(len(A), len(B))''. | * Demonstrați prin inducție structurală proprietatea ''len(app(A, B)) = add(len(A), len(B))''. | ||
| Line 122: | Line 124: | ||
| * **Ștergerea** elementului de la poziția ''n'' din listă (ex: ștergerea celui de-al treilea element din $[a, b, c, d, e, f, g]$ produce $[a, b, d, e, f, g]$). | * **Ștergerea** elementului de la poziția ''n'' din listă (ex: ștergerea celui de-al treilea element din $[a, b, c, d, e, f, g]$ produce $[a, b, d, e, f, g]$). | ||
| * **Simetria structurală**: Verificați dacă doi arbori binari sunt simetrici (ex: un arbore cu structura ''node(empty, x, node(empty, y, empty))'' este simetric cu unul de forma ''node(node(empty, z, empty), w, empty)''). | * **Simetria structurală**: Verificați dacă doi arbori binari sunt simetrici (ex: un arbore cu structura ''node(empty, x, node(empty, y, empty))'' este simetric cu unul de forma ''node(node(empty, z, empty), w, empty)''). | ||
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/24/laboratoare/tda/tda-sol.zip|Soluții]] | + | |
| ===== Referințe ===== | ===== Referințe ===== | ||
| * [[https://www.ic.unicamp.br/~meidanis/courses/mc336/problemas-lisp/L-99_Ninety-Nine_Lisp_Problems.html|Probleme de programare funcțională]] | * [[https://www.ic.unicamp.br/~meidanis/courses/mc336/problemas-lisp/L-99_Ninety-Nine_Lisp_Problems.html|Probleme de programare funcțională]] | ||