OK, lần đầu tiên xác định các chức năng:
printEven(I,N) when I >= N -> ok;
printEven(I,N) ->
if
I rem 2 == 0 -> io:format("~p~n",[I]), printEven(I+1,N);
I rem 2 == 1 -> printEven(I+1,N)
end.
Erlang là một ngôn ngữ lập trình chức năng và (theo định nghĩa) chức năng 'có' một giá trị, do đó bạn sẽ nhận được 'cái gì' trở lại. Theo quy ước, điều bạn nhận được khi hoàn thành một hàm mà bạn đang sử dụng cho các tác dụng phụ là nguyên tử 'ok', đó là cách tốt nhất để sử dụng ở đây.
Bạn có thể 'âm thầm hủy' giá trị trả lại nếu muốn. Bạn làm điều đó khi bạn gọi hàm bằng mô hình kết hợp với 'không quan tâm' biến (được gạch dưới):
_ = printEven(3,9),
hoặc bằng cách gọi hàm mà không có một mô hình phù hợp:
printEven(3,9),
Tuy nhiên, bạn là tốt hơn để luôn luôn kiểm tra giá trị trả về bởi mô hình kết hợp khi bạn gọi một hàm:
ok = printEven(3,9),
Đây là aa thói quen thực sự tốt để có được vào bởi vì bạn sẽ được sử dụng rất nhiều lib chức năng rary trả lại mã lỗi như bạn có thể nhìn thấy từ thông số kỹ thuật của họ:
@spec funky(X) -> [ok | {error, bad_op} | {error, wig_out}]
tác dụng phụ Nếu sôi nổi có bạn muốn biết nó đã thất bại tại bằng cách gọi nó với một mô hình phù hợp vì vậy nó sẽ sụp đổ ở đây và bây giờ nếu không sôi nổi:
ok = funky(99),
Nếu bạn kết hợp nó với '_'
hoặc bỏ qua các giá trị trả về nó sẽ sụp đổ 268 dòng sau khi mojo của bạn hy vọng sôi nổi đã làm thang của mình, và sau đó nó là nhiều khó tìm hơn.
Đây là chương trình đường dẫn hạnh phúc được thực hiện trong Erlang. "Hãy để nó sụp đổ" là phương châm. Nếu bạn là người mới đến Erlang bạn sẽ thấy điều này rất bối rối - như đi bộ về trần truồng. Đừng lo lắng nắm lấy nó, nó là một điều tốt. Nó dẫn đến rất nhiều mã 'không được viết'.
(Bạn cũng nên có thói quen đưa mệnh đề mà kết thúc đệ quy như các khoản đầu như thể hiện ở đây - nó làm cho việc đọc mã sooo dễ dàng hơn nhiều khi bạn có một chức năng đa khoản.)
Umm, mã này không thể biên dịch - mệnh đề đầu tiên sẽ phải kết thúc bằng dấu chấm phẩy không phải là dấu chấm hết. Bạn có đang chạy nó trong trình bao không? Nếu bạn là sau đó nó sẽ luôn luôn in những gì nó trả về và nó luôn luôn trả về một cái gì đó. Nếu bạn không chạy nó trong vỏ sau đó chỉ cần thả các định dạng io: –