aprendiendo ( Erlang ).

lunes, 16 de mayo de 2011

Guardas.

| 0 comentarios |

Las guardas son una construcción booleana que nos permite o facilita la selección de una clausula concreta de un conjunto de ellas. La sintaxis de una función con guarda es nombre_clausula ( parámetros ) when guarda -> .
Supongamos que deseamos realizar una función que nos proporcione el máximo de dos números.
max ( A, B ) when A > B -> 
    A;
max ( _, B ) -> 
    B.
Como vemos con la palabra mágica when indicamos que la primera clausula se ejecutara cuando se cumpla la condición. En este caso, cuando A sea mayor que B.
Una secuencia de guardas es un conjunto de guardas separadas por comas o punto y comas.
  • when G1;G2;...;GN ->: La clausula se ejecutara cuando algunas de las guardas sea cierta.
  • when G1,G2,...,GN ->: La clausula se ejecutara cuando todas las guardas sean ciertas.
Hasta ahora hemos dicho que las guardas son sentencias booleanas y es cierto, pero no todas las expresiones booleanas son validas para el uso de guardas. Las sentencias validas para guardas.
  • El átomo true.
  • Otras constantes y variables que evalúen a un booleano.
  • Llamadas a funciones BIF's
  • Comparaciones
  • Expresiones booleana
  • Expresiones booleanas de corto circuitos
Las funciones BIF's validas son:
  • is_atom(X): X es un átomo
  • is_binary(X): X es de tipo binario
  • is_constant(X): es X una constante
  • is_float(X): X es flotante
  • is_function(X): X es una función
  • is_function(X, N): X es una función con aridad N
  • is_integer(X): X es un entero
  • is_list(X): X es una lista
  • is_number(X): X es un número (entero o float)
  • is_pid(X): X es un PID (process ID)
  • is_port(X): X es de tipo Port
  • is_reference(X): es una referencia
  • is_tuple(X): X es una tupla
  • is_record(X,Tag): X es un registro de etiqueta Tag
  • is_record(X,Tag,N): X es una registro de etiqueta Tag y tamaño N

Publicar un comentario

0 comentarios:

 
Licencia Creative Commons
Aprendiendo Erlang por Verdi se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.