2010-09-21 37 views
5

Tôi mới đến Erlang và tôi đã thử một số công trình xây dựng Erlang. chương trình của tôi nên cư xử như thế:Erlang - trường hợp xây dựng

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

Đây là mã của tôi trong 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. 

Cảm ơn trước sự giúp đỡ.

Trả lời

4

Sử dụng {ok, [X]} = io:fread("","~d") (dấu ngoặc xung quanh X).

fread trả về danh sách làm phần tử thứ hai của bộ túp (có ý nghĩa trong trường hợp bạn đọc nhiều mã thông báo), vì vậy bạn cần lấy phần tử ra khỏi danh sách trước khi có thể so sánh nó với 42.

Lưu ý rằng thay vì mô hình kết hợp vào kết quả ==, bạn có thể chỉ đơn giản là mô hình phù hợp trên bản thân X, ví dụ:

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

Bất cứ ý tưởng tại sao 'io: fread ('nhập>' "~ d ") .' đọc' 42' được nhập vào bàn phím trả về '{ok," * "}'? Tôi chưa thấy ký hiệu '{ok," * "}' trước đó. –

+4

@Manoj: Trong chuỗi Erlang chỉ là danh sách số nguyên. Vì vậy, chuỗi chữ '" * "' và danh sách '[42]' là cùng một điều (42 là số đại diện cho dấu sao trong ASCII). Khi hiển thị một danh sách chỉ chứa số nguyên trong phạm vi ASCII có thể in, erlang sẽ hiển thị nó dưới dạng một chuỗi. – sepp2k

+0

Cảm ơn. Nó hoạt động :) – szemek

Các vấn đề liên quan