LetLet

Espressione letLet expression

Un'espressione let consente di acquisire un valore da un calcolo intermedio in una variabile.A let expression can be used to capture a value from an intermediate calculation in a variable.

let-expression:let-expression:
      let variable-list in expression
variable-list:
      variable
      variable
, variable-list
variable:
      variable-name
= expression
variable-name:
      identifier
      let variable-list in expression
variable-list:
      variable
      variable
, variable-list
variable:
      variable-name
= expression
variable-name:
      identifier

Nell'esempio seguente vengono illustrati i risultati intermedi calcolati e archiviati nelle variabili x, y e z, successivamente usate in un calcolo di tipo x + y + z:The following example shows intermediate results being calculated and stored in variables x, y, and z which are then used in a subsequent calculation x + y + z:

let     x = 1 + 1,
        y = 2 + 2,     
        z = y + 1 
in
        x + y + z

Il risultato di questa espressione è:The result of this expression is:

11  // (1 + 1) + (2 + 2) + (2 + 2 + 1)

Quando si valutano le espressioni all'interno di una let-expression, sono valide le considerazioni seguenti:The following holds when evaluating expressions within the let-expression:

  • Le espressioni nell'elenco di variabili definiscono un nuovo ambito contenente gli identificatori della produzione variable-list e devono essere presenti quando si valutano le espressioni all'interno delle produzioni variable-list.The expressions in the variable list define a new scope containing the identifiers from the variable-list production and must be present when evaluating the expressions within the variable-list productions. Le espressioni all'interno di una variable-list possono fare riferimento l'una all'altra.Expressions within the variable-list may refer to one-another.

  • Le espressioni all'interno di una variable-list devono essere valutate prima che venga valutata l'espressione contenuta nella let-expression.The expressions within the variable-list must be evaluated before the expression in the let-expression is evaluated.

  • Le espressioni all'interno di una variable-list non devono essere valutate, se non quando si accede ad esse.Unless the expressions in the variable-list are accessed, they must not be evaluated.

  • Gli errori generati durante la valutazione delle espressioni contenute in una let-expression vengono propagati.Errors that are raised during the evaluation of the expressions in the let-expression are propagated.

Un'espressione let può essere considerata come espediente sintattico rispetto a un'espressione di record implicita.A let expression can be seen as syntactic sugar over an implicit record expression. L'espressione seguente equivale all'esempio precedente:The following expression is equivalent to the example above:

[     x = 1 + 1,
      y = 2 + 2,
      z = y + 1,
      result = x + y + z 
][result]