2010-09-21 4 views
5

Я новичок в Erlang, и я пробовал некоторые конструкции Erlang. Моя программа должна вести себя что-то вроде этого:Erlang - конструкция корпуса

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

Вот мой код в 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. 

Спасибо заранее за помощь.

ответ

4

Использовать {ok, [X]} = io:fread("","~d") (скобки вокруг X).

fread возвращает список в качестве второго элемента кортежа (что имеет смысл в случае, если вы читаете более чем один маркер), так что вам нужно, чтобы получить элемент из списка, прежде чем можно сравнить его с 42.

Обратите внимание, что вместо сопоставления с образцом на результат ==, вы можете просто шаблон матч на самом X, то есть:

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

Любая идея, почему 'ю: Fread («введите>»«~ d ").' reads '42', введенный в клавиатуру, возвращает' {ok, "*"} '? Я еще не видел нотацию '{ok, * *"} '. –

+4

@Manoj: В Erlang строки являются целыми списками. Таким образом, строковый литерал '' * "' и список '[42]' - это одно и то же (42 - число, представляющее звездочку в ASCII). При отображении списка, содержащего только целое число в печатном диапазоне ASCII, erlang отобразит его как строку. – sepp2k

+0

Спасибо. Работает :) – szemek

Смежные вопросы