2010-09-21 17 views
5

Sono nuovo di Erlang e ho provato alcune costruzioni di Erlang. Il mio programma si deve comportare qualcosa di simile:Erlang - custodia da costruzione

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

Ecco il mio codice in 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. 

Grazie in anticipo per l'aiuto.

risposta

4

Utilizzare {ok, [X]} = io:fread("","~d") (parentesi intorno a X).

fread restituisce un elenco come il secondo elemento della tupla (che ha senso se si sta leggendo più di un token), quindi è necessario estrarre l'elemento dall'elenco prima di poterlo confrontare con 42.

Nota che, invece di pattern matching sul risultato di ==, si può semplicemente partita modello su X stesso, vale a dire:

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

Qualsiasi idea del perché 'io: fread ('enter>', "~ d ") .' legge' 42' inserito nella tastiera restituisce '{ok," * "}'? Non ho mai visto la notazione '{ok, '*"} 'prima. –

+4

@Manoj: le stringhe di Erlang sono solo elenchi di numeri interi. Quindi la stringa letterale '" * "' e la lista '[42]' sono la stessa cosa (42 è il numero che rappresenta l'asterisco in ASCII). Quando viene visualizzato un elenco che contiene solo un numero intero nell'intervallo ASCII stampabile, erlang lo visualizzerà come una stringa. – sepp2k

+0

Grazie. Sta funzionando :) – szemek