[英]Erlang function for()?
據我了解,Erlang沒有執行for循環的功能。 但是,在此代碼段中,它使用了函數for()。 我不太了解for()函數,因此不勝感激。
-module(helloworld).
-export([max/1,start/0]).
max(N) ->
Max = erlang:system_info(process_limit),
io:format("Maximum allowed processes:~p~n" ,[Max]),
statistics(runtime),
statistics(wall_clock),
L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) -> Pid ! die end, L),
U1 = Time1 * 1000 / N,
U2 = Time2 * 1000 / N,
io:format("Process spawn time=~p (~p) microseconds~n" , [U1, U2]).
wait() ->
receive
die -> void
end.
for(N, N, F) -> [F()];
for(I, N, F) -> [F()|for(I+1, N, F)].
start()->
max(1000),
max(100000).
另外,Erlang的運行時間和wall_clock有什么區別? 我相信掛鍾是基於計算機時鍾的,而運行時是基於Erlang中的某種滴答聲的? 我可能是錯的
我不太了解for()函數,因此不勝感激。
重命名函數xyz()。 現在,這有意義嗎?
xyz(N, N, F) -> [F()];
xyz(I, N, F) -> [F()|xyz(I+1, N, F)].
xyz()
函數的第一個子句將查找相同(N, N...)
的第一個和第二個參數。 如果前兩個參數相同,則xyz()
返回一個列表,其中包含調用第3個參數的返回值。
當前兩個參數不同(I, N, ...)
時,xyz()函數的第二個子句將匹配。 在這種情況下,將調用第三個參數,並且其返回值是列表的開頭,列表的xyz()
是對xyz()
函數的遞歸調用,其中第一個參數遞增。
因此,讓我們嘗試一個簡單的示例:
-module(f1).
-compile(export_all).
show() ->
hello.
xyz(End, End, F) -> [F()];
xyz(Start, End, F) -> [F()|xyz(Start+1, End, F)].
test() ->
xyz(0, 5, fun show/0).
在外殼中:
5> c(f1).
f1.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,f1}
6> f1:test().
[hello,hello,hello,hello,hello,hello]
這是另一個示例:
for(End, End) ->
io:format("~w~n", [End]);
for(Start, End) ->
io:format("~w~n", [Start]),
for(Start+1, End).
test() ->
for(0, 5).
在外殼中:
12> c(f1).
f1.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,f1}
13> f1:test().
0
1
2
3
4
5
ok
14>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.