2010-09-21 12 views
5

Soy nuevo en Erlang y he probado algunas construcciones Erlang. Mi programa debe comportarse algo así:Erlang - Construcción caso

if x == 42: 
    print "Hi" 
else: 
    print "Hello" 

Aquí está mi código en Erlang

-module(tested). 
-export([main/0]). 

main() -> 
    {ok, X} = io:fread("","~d"), 
    case X == 42 of 
    true -> io:fwrite("Hi\n"); 
    false -> io:fwrite("Hello\n") 
    end. 

Gracias de antemano por la ayuda.

Respuesta

4

Uso {ok, [X]} = io:fread("","~d") (corchetes X).

fread devuelve una lista como el segundo elemento de la tupla (lo cual tiene sentido en el caso de que usted está leyendo más de un token), por lo que necesita para obtener el elemento de la lista antes de poder compararlo con 42.

Tenga en cuenta que en lugar de patrones sobre el resultado de ==, usted podría simplemente coincidencia de patrón en X en sí, es decir:

case X of 
    42 -> io:fwrite("Hi\n"); 
    _ -> io:fwrite("Hello\n") 
end. 
+0

Cualquier idea de por qué 'io: fread ('enter>', "d ~ ") .' lee' 42' ingresado en el teclado devuelve '{ok," * "}'? No he visto la notación '{ok," * "}' antes. –

+4

@Manoj: En Erlang, las cadenas son solo listas de enteros. Entonces la cadena literal '" * "' y la lista '[42]' son lo mismo (42 es el número que representa el asterisco en ASCII). Cuando se visualiza una lista que solo contiene un entero en el rango ASCII imprimible, erlang lo mostrará como una cadena. – sepp2k

+0

Gracias. Esta funcionando :) – szemek