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]] | ||