列出理解与高阶函数



以下哪一个代码片段是首选的?为什么?

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

请注意,打印值和返回值是两件完全不同的事情。因此,我想问你的函数应该做什么

哪种选择在这里完全是一种选择,你可以选择你觉得更好看的。列表理解通常提供了一种表达映射和过滤器的简洁方式。

最新更新