¿Cómo implemento esta expresión if-else en erlang?Cómo implementar if-else
if(a == b) {
expression1
} else {
expression2
}
¿Cómo implemento esta expresión if-else en erlang?Cómo implementar if-else
if(a == b) {
expression1
} else {
expression2
}
if
a == b ->
expr1;
true ->
exprElse
end
no hay una verdadera cosa en Erlang, que acaba de coincidir con la verdadera. Más información en el Erlang documentation.
Tienes que prestar mucha atención al ';' terminador:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
No es un idioma fácil de copiar y pegar.
if
A =:= B ->
expr1;
true ->
expr2
end
o
case A =:= B of
true -> expr1;
false -> expr2
end
o
case A of
B -> expr1;
_ -> expr2
end
o
foo(A,B), ...
...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
patrón de juego es uno de Erlangs muchos puntos fuertes y que a menudo se puede utilizar en lugar de las instrucciones if. A menudo es más legible para emparejar patrones en argumentos de función o usar una expresión de caso (que también es coincidencia de patrones).
Supongamos que tiene una función some_function
que toma dos argumentos. Si los argumentos son iguales, evalúa expression1; de lo contrario, evalúa expression2. Esto se puede expresar en Erlang como:
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
Es bastante sorprendente lo mucho que se puede lograr con este tipo de coincidencia de patrones simples. Con cláusulas de guardia se puede expresar patrones más complicados, por ejemplo,
some_function(A, B) when A < B -> expression3.
Otra posibilidad es utilizar una expresión case .. of
. Su ejemplo particular se traduciría en
case a == b of
true -> expression1;
false -> expression2
end.
(En este caso expression2
siempre serían evaluados desde a
y b
son átomos y nunca iguales entre sí. Las variables en Erlang son mayúsculas.)
Usted puede leer más sobre las expresiones de Erlang here.
También sugiero usar '=: =' en su lugar de '=='. Esta es una muy buena respuesta: los programadores de erlang nuevos siempre deben usar 'case' hasta que descubran por qué la instrucción' if' debería haber sido la instrucción 'when'. – archaelus
Otra opción:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.
Véase también [esta cuestión] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia