Funzioni
Le funzioni sono un concetto fondamentale in Scheme, poiché forniscono i mezzi per incapsulare la logica, abilitare il riutilizzo del codice e strutturare gli script in modo efficace. Con le funzioni, puoi creare script modulari e gestibili che gestiscono un’ampia gamma di attività, dalle operazioni di base ai flussi di lavoro avanzati in Lumi.
Questa sezione funge da introduzione alle funzioni di Scheme e pone le basi per comprenderne i tipi, le definizioni e gli usi. Le sezioni successive approfondiranno i tipi di funzioni specifiche e le loro capacità uniche.
Sintassi ed espressioni minime
Il codice schema è composto da espressioni. Un’espressione restituisce un valore. La sintassi è uniforme: le parentesi formano una chiamata, preceduta dal nome dell’operatore o della funzione.
(+ 1 2) ; Adds 1 and 2, resulting in 3
(if #t 1 0) ; Evaluates to 1 because the condition is true
(list 1 2 3) ; Creates a list: (1 2 3)Poiché tutto è un’espressione, il flusso di controllo si adatta naturalmente allo stesso stile delle chiamate di funzione.
Perché le funzioni sono importanti
Le funzioni svolgono un ruolo fondamentale in Scheme per diversi motivi:
- Riutilizzabilità del codice: evita la ripetizione incapsulando la logica in componenti riutilizzabili.
- Modularità: suddividi le attività complesse in parti più piccole e gestibili.
- Comportamento dinamico: accetta parametri per gestire vari input o adattarsi a diverse situazioni.
- Astrazione superiore: Semplifica la logica concentrandosi su “cosa” fa una funzione anziché su “come” lo fa.
Panoramica dei tipi di funzioni
Scheme offre una varietà di costrutti di funzioni, ciascuno adatto a casi d’uso specifici:
Funzioni con nome Queste sono le funzioni standard definite con
define. Costituiscono la spina dorsale della maggior parte degli script.(define (square x) (* x x))Funzioni anonime Conosciute anche come funzioni lambda, si tratta di funzioni senza nome definite in linea per un utilizzo una tantum.
(lambda (x) (* x x))Funzioni di ordine superiore Funzioni che accettano altre funzioni come argomenti o restituiscono funzioni come risultati, consentendo potenti astrazioni come mappatura, filtraggio e riduzione.
(map (lambda (x) (* x x)) '(1 2 3 4)) ; Returns (1 4 9 16)
Sintassi generale per le funzioni
Le funzioni in Scheme hanno una sintassi semplice e coerente:
(define (function-name parameter1 parameter2 ...)
body-expression)function-name: Il nome della funzione.parameter1, parameter2, ...: Gli argomenti accettati dalla funzione.body-expression: La logica eseguita quando viene chiamata la funzione.
Esempio:
(define (add x y)
(+ x y))
(add 3 5) ; Returns 8Effetti collaterali e stato globale
In Lumi, molte procedure utili hanno effetti collaterali: modificano un’immagine, cambiano un disegno, scrivono un file o visualizzano l’output.
- Isolare gli effetti collaterali in procedure piccole e chiaramente denominate.
- Evita di modificare il contesto globale a meno che non sia necessario.
- Quando cambi contesto (colori, pennelli, ecc.), avvolgi il lavoro con
lumi-context-pushelumi-context-popin modo che lo stato dell’utente venga ripristinato.