以下哪一个代码片段是首选的?为什么?
check_number(X) ->
case lists:filter(fun(Y) -> check_num(Y) end, lists:seq(1,X)) of
[] -> empty;
List -> io:format("~w~n", [List])
end.
或
check_number(X) ->
io:format("~w~n", [[N || N <- lists:seq(1,X), check_num(N)]]).
假设check_num(N(是一个谓词。
您的第二个函数与第一个函数不相等。你可以写你的第一个函数,它等于第二个函数,就像这样:
check_number(X) ->
io:format("~w~n", [lists:filter(fun check_num/1, lists:seq(1,X))]).
正如你所看到的,它看起来并没有大多少。使用哪一种完全取决于你和你同事的美感。
您的函数check_number/1
究竟应该做什么?如果没有整数满足check_num/1
,则第一个返回empty
,而如果有这样的整数,则打印它们的列表,则返回ok
(io:format
的返回值(。而第二个总是打印列表,即使它是空的,并且返回ok
。
请注意,打印值和返回值是两件完全不同的事情。因此,我想问你的函数应该做什么
哪种选择在这里完全是一种选择,你可以选择你觉得更好看的。列表理解通常提供了一种表达映射和过滤器的简洁方式。