laisser
Le nom let est utilisé car il reflète ses origines mathématiques d’introduction de liaisons temporaires, comme dans “Let ( x = 2 ) et ( y = 3 )”.
Une instruction let dans Scheme est une construction de liaison utilisée pour définir des variables dans une portée localisée. Il vous permet de créer des liaisons temporaires pour les variables, puis d’exécuter un bloc de code à l’aide de ces liaisons. Ceci est particulièrement utile pour garder le code modulaire et éviter la pollution variable globale.
Il existe trois formes principales de let dans Scheme :
let: Lettrage standard pour créer des liaisons locales simples.let*: Let séquentiel, où les liaisons peuvent dépendre des résultats des liaisons précédentes.- Named
let: Une forme spéciale deletqui crée des boucles récursives ou des procédures nommées.
Dans sa forme la plus simple, let crée des liaisons de variables locales et évalue une expression avec ces liaisons.
(let ((variable1 value1)
(variable2 value2))
expression)- Liaisons : une liste de paires où chaque paire attribue un
valueà unvariable. - Expression : Le corps du
let, qui peut utiliser les variables définies localement.
Exemple
(let ((x 10)
(y 20))
(+ x y))- Ceci définit deux variables locales,
x(10) ety(20). - Il calcule ensuite
(+ x y)en utilisant ces variables.
Résultat : 30
La construction let*
La construction let* est similaire à let, mais les liaisons sont évaluées séquentiellement. Cela signifie que les liaisons ultérieures peuvent dépendre des liaisons antérieures.
(let* ((variable1 value1)
(variable2 expression-using-variable1))
expression)Exemple
(let* ((x 10)
(y (+ x 5)))
(* x y))- La première liaison attribue
10àx. - La deuxième liaison calcule
ycomme(+ x 5), en utilisant la valeur dex. - Le corps calcule
(* x y).
Résultat : 150
Nommé let
Un let nommé est une forme spéciale de let qui fournit un nom pour le bloc let lui-même, le transformant en une procédure récursive. Ceci est utile pour créer des boucles ou des calculs récursifs.
(let name ((variable1 initial-value1)
(variable2 initial-value2))
body-expression)- Nom : Le bloc
letreçoit un nom, définissant effectivement une fonction. - Liaisons : valeurs initiales des variables, similaires à un
letstandard. - Corps : L’expression peut appeler le nommé
letde manière récursive.
Exemple : boucle avec Named let
(let loop ((n 5)
(result 1))
(if (= n 0)
result
(loop (- n 1) (* result n))))- La fonction
loopcommence parn = 5etresult = 1. - Si
nest0, il renvoie leresult. - Sinon, il s’appelle récursivement avec
n - 1etresult * n.
Résultat : 120 (Factorial de 5)
Tableau récapitulatif
| Construire | Descriptif | Cas d’utilisation |
|---|---|---|
let | Définit les liaisons locales pour les variables. | À utiliser lorsque toutes les liaisons sont indépendantes et ne dépendent pas les unes des autres. |
let* | Définit les liaisons locales séquentielles. | À utiliser lorsque les liaisons ultérieures dépendent des résultats des liaisons antérieures. |
Nommé let | Définit des procédures locales récursives. | Utilisez des boucles for, des calculs itératifs ou une récursivité dans un contexte local. |
Exemples
Utilisation de let pour le calcul local
(let ((x 2)
(y 3))
(+ (* x x) (* y y)))Résultat : 13 (Calcule x² + y²)
Utilisation de let* pour les dépendances séquentielles
(let* ((x 2)
(y (* x x))
(z (* y x)))
z)Résultat : 8 (Calcule x³)
Utilisation de Named let pour le calcul récursif
(let factorial ((n 5)
(result 1))
(if (= n 0)
result
(factorial (- n 1) (* result n))))Résultat : 120 (Factorial de 5)
En utilisant let, let* et nommé let, Scheme permet une programmation modulaire, récursive et séquentielle avec des règles de portée claires.