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

2 番目の関数は最初の関数と等しくありません。次のように、最初の関数を 2 番目の関数と等しくすることができます。

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ことになっていますか?最初のものは、条件を満たす整数がない場合に戻ります が、そのような整数がある場合は、それらのリストを出力して返します(の戻り値)。2番目のものは、リストが空であっても常にリストを出力し、 を返しますemptycheck_num/1 okio:format ok

値を表示することと返すことは、2 つの完全に異なるものであることに注意してください。したがって、あなたの機能が何をすべきかについての私の質問。

ここでは、どの代替案を選択するかは純粋に選択の一致であり、見栄えが良いと思われるものを選択できます。リスト内包表記は、多くの場合、マップとフィルターを簡潔に表現する方法を提供します。

于 2013-03-29T14:39:05.153 に答える