2017-02-25 3 views
0

以下のErlangコードを使用して整数のリストの中で最も高い整数を取得したいのですが、何らかの理由で常にリストの最後の整数が得られることになります。どんな助け?整数のリストに対してerlangでfoldlを使用して最大整数を返すにはどうすればよいですか?

ソリューション例 - >test:max([2,8,5,6]).は8を返す必要がありますが、このコードではFLAccの最大を返す必要があります6.

-spec max(L) -> M when 
    L::[integer()], 
    M::integer(). 

max([H | T]) -> 
F = fun(L, Acc) -> max([L]) end, 
lists:foldl(F, H, T). 

答えて

1

あなたの関数を返します。あなたはそのために組み込みmax/2機能を使用することができます。

... 
F = fun(L, Acc) -> max(L, Acc) end. 
... 

テスト:

1> F = fun(L, Acc) -> max(L, Acc) end. 
#Fun<erl_eval.12.52032458> 
2> [H | T] = [2, 8, 5, 6]. 
[2,8,5,6] 
3> lists:foldl(F, H, T). 
8 
+0

ありがとうございました:) –

+0

この場合、回答を受け入れたものとしてマークする必要があります。 –

1

あなたはあなたの関数に戻る何FAccの新しい値になり、そして最終的に値lists:foldl/3が返されます。

Fの中で比較を行い、Accが現在の値より大きいかどうかを確認してください。とにかくlists:foldl/3にリストを反復しているので、max/1を再帰する必要はありません。

実際のコードがすぐに必要な場合は教えてください。しかし、自分で考えてみることをおすすめします。それはあなたのためにもっと楽しいです。

関連する問題