This shows you the differences between two versions of the page.
|
pp:22:laboratoare:racket:functionale [2022/03/11 11:53] bot.pp created |
pp:22:laboratoare:racket:functionale [2022/03/11 14:06] (current) bot.pp |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Racket: Funcții ca valori. Funcționale ====== | ====== Racket: Funcții ca valori. Funcționale ====== | ||
| - | * Data publicării: 15.03.2021 | + | * Data publicării: 11.03.2022 |
| - | * Data ultimei modificări: 15.03.2021 | + | * Data ultimei modificări: 11.03.2022 |
| ===== Obiective ===== | ===== Obiective ===== | ||
| Line 51: | Line 51: | ||
| ==== Transformarea funcțiilor curry în funcții uncurry și invers ==== | ==== Transformarea funcțiilor curry în funcții uncurry și invers ==== | ||
| - | <HTML><ol></HTML> | + | === Funcție curry -> uncurry === |
| - | <HTML><li></HTML><HTML><p></HTML>Funcție curry -> uncurry Dacă vrem să transmitem odată toți parametrii unei funcții curry atunci vom primi o eroare de tip "arity mismatch".<HTML></p></HTML> | + | |
| - | <HTML><p></HTML>De exemplu, apelul ''%%(add-curry 1 2)%%'' va genera eroarea "add-curry: arity mismatch; expected: 1; given: 2" pentru că add-curry este o funcție care primește un singur parametru x și întoarce o altă funcție. Un apel corect este de forma:<HTML></p></HTML><HTML></li></HTML><HTML></ol></HTML> | + | Dacă vrem să transmitem odată toți parametrii unei funcții curry atunci vom primi o eroare de tip "arity mismatch". |
| + | |||
| + | De exemplu, apelul ''%%(add-curry 1 2)%%'' va genera eroarea "add-curry: arity mismatch; expected: 1; given: 2" pentru că add-curry este o funcție care primește un singur parametru x și întoarce o altă funcție. Un apel corect este de forma: | ||
| <code lisp> | <code lisp> | ||
| Line 59: | Line 61: | ||
| </code> | </code> | ||
| - | <code> | + | Un mod de rezolvare a acestei probleme este prin transformarea funcției add-curry într-o funcție uncurry: |
| - | Un mod de rezolvare a acestei probleme este prin transformarea | + | |
| - | funcției add-curry într-o funcție uncurry: | + | |
| - | </code> | ||
| <code lisp> | <code lisp> | ||
| (define converted-add-curry | (define converted-add-curry | ||
| Line 72: | Line 71: | ||
| </code> | </code> | ||
| - | <HTML><ol start="2"></HTML> | + | === Funcție uncurry -> curry === |
| - | <HTML><li></HTML>Funcție uncurry -> curry Orice funcție uncurry poate fi transformată ușor într-o funcție curry prin intercalarea de funcții anonime care să primească treptat fiecare parametru în parte. De exemplu pentru add-uncurry:<HTML></li></HTML><HTML></ol></HTML> | + | |
| + | Orice funcție uncurry poate fi transformată ușor într-o funcție curry prin intercalarea de funcții anonime care să primească treptat fiecare parametru în parte. De exemplu pentru add-uncurry: | ||
| <code lisp> | <code lisp> | ||
| Line 304: | Line 304: | ||
| Citiți exercițiile **rezolvate**; apoi, rezolvați exercițiile **propuse**. | Citiți exercițiile **rezolvate**; apoi, rezolvați exercițiile **propuse**. | ||
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/functionale-skel.zip|Exerciții rezolvate și propuse]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/22/laboratoare/racket/functionale-skel.zip|Exerciții rezolvate și propuse]] |
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/functionale-sol.zip|Soluții]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/22/laboratoare/racket/functionale-solutii.zip|Soluții]] |
| * [[https://github.com/cs-pub-ro/PP-laboratoare/raw/master/racket/functionale/functionale-cheatsheet.pdf|Cheatsheet Laboratorul 3]] | * [[https://github.com/cs-pub-ro/PP-laboratoare/raw/master/racket/functionale/functionale-cheatsheet.pdf|Cheatsheet Laboratorul 3]] | ||