2009-06-08 25 views
22

¿Cómo implemento esta expresión if-else en erlang?Cómo implementar if-else

if(a == b) { 
    expression1 
} else { 
    expression2 
} 
+0

Véase también [esta cuestión] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia

Respuesta

31
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.

+0

Gud one thanx mucho – Abhimanyu

+0

no es el operador de igualdad en Erlang '=: ='? – Tommy

+0

También tenga en cuenta que es un error si ninguna de las condiciones coincide, de ahí la cláusula verdadera como el final como un fracaso. –

15
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. 
19

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.

+4

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

8

Otra opción:

case a of 
    b -> expr1; %% true 
    _ -> expr2 %% false 
end.