2

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

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) 是一个谓词。

4

2 回答 2

6

你的第二个功能不等于第一个。你可以编写你的第一个函数,它等于第二个函数:

check_number(X) ->
    io:format("~w~n", [lists:filter(fun check_num/1, lists:seq(1,X))]).

正如你所看到的,它看起来并不大。使用哪一种完全取决于您和您的同事的美感。

于 2013-03-27T21:58:18.807 回答
2

您的功能到底check_number/1应该做什么?如果没有满足的整数,第一个返回 ,而如果有这样的整数,它会打印它们的列表并返回(的返回值)。而第二个总是打印列表,即使它是空的,并返回emptycheck_num/1 okio:format ok

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

哪种选择在这里纯粹是一种选择,您可以选择您觉得看起来更好的选择。列表推导通常提供一种表达映射和过滤器的简洁方式。

于 2013-03-29T14:39:05.153 回答