Diferencia entre revisiones de «Programación en Erlang»

Contenido eliminado Contenido añadido
Sin resumen de edición
Sin resumen de edición
Línea 701:
===Declaración de Variables===
La declaración de variables es diferente a Erlang que a otros leguajes, ya que Erlang no define una variable de tipo int o float. Sino que este se da cuenta al volverse le a asignar. Las variables de Erlang son de simple asignamiento. Comienzan con una letra capital o un ‘underscore’ seguidas de un texto alfanumérico.
 
==Tabla de Operadores con Asociatividad y Precedencia==
En expresiones que consisten de sub-expresiones los operadores serán desarrollados de acuerdo a su precedencia definida.
{|Border=1
|+'''Precedencia (de más alta a más baja)'''
|-
!Símbolo
!Asociatividad
|-
|<nowiki>:</nowiki>
|
|-
|<nowiki>#</nowiki>
|
|-
|<nowiki>Unary + - bnot not </nowiki>
|
|-
|<nowiki>/ * div rem band and </nowiki>
|Izquierda
|-
|<nowiki>+ - bor bxor bsl bsr or xor</nowiki>
|Izquierda
|-
|<nowiki>++ --</nowiki>
|Derecha
|-
|<nowiki>== /= =< < >= > =:= =/= </nowiki>
|
|-
|andalso
|
|-
|orelse
|
|-
|<nowiki>= !</nowiki>
| Derecha
|-
|catch
|
|}
 
Los operadores con la prioridad más alta serán los primeros en evaluarse. Operadores con la misma prioridad serán evaluados por su asociatividad. Los operadores aritméticos con asociatividad por la izquierda son evaluados de izquierda a derecha.
 
Ejemplo: <br>
6 + 5 * 4 - 3 / 2 => 6 + 20 - 1.5 => 26 - 1.5 => 24.5
 
===Expresiones booleanas de Corto Circuito===
 
Ejemplo:
Expr1 orelse Expr2
Expr1 andalso Expr2
Estas son expresiones booleanas en las que Expr2 será evaluada solo si es necesario. En una expresión orelse, Expr2 se evaluara si y solo si Expr1 se evalúa a false. En una expresión andalso, Expr2 será evaluado si y solo si Expr1 se evalúa a true.
 
Ejemplo:
 
if A >= 0 andalso math:sqrt(A) > B -> ...
 
if is_list(L) andalso length(L) == 1 -> ...
 
==Estructuras de decisión e iteración==
 
===IF===
if
GuardSeq1 ->
Body1;
...;
GuardSeqN ->
BodyN
end
 
Las ramas de un si-expresión se analizan de forma secuencial hasta que una secuencia de guardia GuardSeq que se evalúa como verdadera se encuentra. Entonces, el organismo correspondiente (la secuencia de expresiones separadas por ',') es evaluada.
El valor de retorno del cuerpo es el valor de retorno de la expresión del IF.
 
Si no hay secuencia de guardia es cierto, una carrera if_clause tiempo de error. Si es necesario, la expresión de la guardia real puede ser utilizado en la última rama, ya que la secuencia de la guardia siempre es cierto.
 
is_greater_than(X,Y) ->
if
X>Y ->
true;
true -> % works on an ´else´ branch
false
end
 
===Case===
La expresión expr es evaluado y el patrón de los patrones se comparan con la secuencia de resultados. Si un partido tiene éxito y la secuencia de la guardia opcional GuardSeq es cierto, el organismo correspondiente se evalúa. <br>
El valor de retorno del cuerpo es el valor de retorno de la expresión caso. Si no hay un patrón de coincidencia con una secuencia de la guardia real, una ejecución case_clause tiempo de error.
 
case Expr of
Pattern1 [when GuardSeq1] ->
Body;
....;
PatternN [when GuardSeqN] ->
BodyN
end
 
==ITERACIONES Y RECURSIONES==
===Guard sequences===
Una secuencia de guardia es un conjunto de guardias separados por punto y coma (;). La secuencia de guardia es cierto si al menos uno de los guardias es cierto.
GUARD1, ...; GuardK
Un guard es un conjunto de expresiones del guard , separadas por comas (,). El guard es cierto si todas las expresiones de la Guardia resultado verdadero.
GuardExpr1, ..., GuardExprN
Las expresiones del Guard permitido (a veces se llaman pruebas de guard) es un subconjunto del conjunto de las expresiones válidas Erlang, desde la evaluación de una expresión de guard debe ser garantizado de estar libre de efectos secundarios.
 
 
 
==Esquema de Administración de Memoria y Separación de Memoria==