,

let!

let! est un opérateur d'affectation. Il fournit le même résultat que set! mais en retournant directement la valeur affectée.


La forme générale de let! est la suivante:

(let! <ref> [<valeur>])


Employer sans valeur, comme dans le cas de set!, la cellule reçoit la valeur par défaut (nothing). Mais cette valeur est directement retournée par l'opérateur.

(define '$x 10)
(display (let! $x))

(nothing)

Si une valeur est indiquée, la cellule ref reçoit la valeur, mais cette valeur est également retournée. Ceci est très intéressant dans le cadre de l'utilisation de boucles.

(define '$x 10)
(define '$i)
(while{let! $i (fetch-and-decr! $x)} {display $i})

10
9
8
7
6
5
4
3
2
1

On peut donc affecter une variable tout en testant une condition relative à sa valeur dans un style plus concis.

De plus, let! est un opérateur atomique, il peut être utilisé d'une manière sûre dans un contexte concurrent.