Skip to content

Esercizi Pratici: Funzioni e Lambda

In questa sezione applichiamo le tecniche funzionali più importanti apprese nel capitolo: Template generici, Deduzione dei tipi (auto) e Funzioni Lambda con cattura.


Il costrutto fold (noto anche come reduce o accumulate) è uno dei mattoni della programmazione funzionale. La funzione scorre una sequenza di elementi comprimendola in un singolo valore finale tramite un accumulatore e una funzione binaria (la Lambda).

  1. Implementa il template fold con la seguente firma:
    template <typename Fn, typename In, typename Out>
    constexpr Out fold(Fn function, In* input, size_t length, Out initial);
  2. Ad ogni passo, aggiorna l’accumulatore invocando: accumulatore = function(accumulatore, elemento_corrente).
  3. Nel main, usa la funzione fold implementata per calcolare:
    • La somma di tutti gli elementi (iniziale 0)
    • Il valore massimo
    • Il valore minimo
    • Il numero di elementi maggiori di 200

Esercizio 2: Implementare all generico (Predicato)

Section titled “Esercizio 2: Implementare all generico (Predicato)”

In programmazione funzionale, un predicato è una funzione che accetta un valore e restituisce un booleano (true/false). Il costrutto all verifica se tutti gli elementi di una sequenza soddisfano un dato predicato.

  1. Implementa il template all con la seguente firma:
    template <typename Fn, typename In>
    constexpr bool all(Fn function, In* input, size_t length);
  2. Applica la tecnica del cortocircuito (short-circuit): non appena un elemento fallisce il test (!function(input[i])), interrompi immediatamente il ciclo restituendo false senza iterare inutilmente i restanti elementi.
  3. Se tutti gli elementi soddisfano la condizione, restituisci true.