ハスケルのfoldr
(たとえば、Java構文を使用)にはList<T>
が使用され、任意のタイプ(<T>
、List<T>
など)が返されます。ハスケルのJavaでのHaskellのfoldr 8
evens :: [Integer] -> [Integer]
evens = foldr (\ x acc -> if mod x 2 == 0 then x : acc else acc) []
:ハスケル、アキュムレータList<Integer>
(一例であり、関数のobjetiveは問題ではない)としてList<Integer>
を取り、別のList<Integer>
を返す使用し、この機能、例えば
我々がここで使用されるようになりましたJava 8が出ていると機能的なスタイルの機能を持っていることを、我々はfoldr
の一種で書き込み機能(List<T>
のだけではなく、重複のない相当)にしたい:
public static Double entropy (List<Double> probs){
return -probs.stream().reduce(0.0, (acc, p) -> acc + p * Math.log(p, 2));
}
reduce
を使用した場合の問題は、List<T>
を受け取った場合にのみ<T>
を返すことができ、別のタイプまたはコレクションを返すことになります。
Java 8でfoldr
を実行する方法はありますか?
必要性を理解するためにサンプルの入出力を提供できますか? – Tunaki
ハスケルの権利(私はハスケルをやったことはありませんが、試してみたことがあります)を読むと、要素だけをフィルタリングしてリストに集めるようです。これは、 'probs.stream()。filter(i - > i%2 == 0).collect(toList())'です。 – Tunaki
@ Tunaki問題は、私たちが提供した例のような一種のアキュムレータが必要なことです。 – Nico