私はスカラを学ぼうとしていますが、部分的に適用された関数よりもカリング関数を使うのは混乱します。スカラーの関数のカレント化と部分的に適用された関数のベストユースケース
私はこれらの概念が重複していないことは確かですが、異なるアプローチの真の目的を見ることはできません。私はこのコードを試した
:
object CurryTest extends App {
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) xs
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int)(x: Int) = ((x % n) == 0)
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
println(filter(nums, modN(2)))
println(filter(nums, modN(3)))
}
ソリューションは、部分的に印加関数を使用:
List(2, 4, 6, 8)
List(3, 6)
:
object PartialFunctionTest extends App {
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) xs
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int, x: Int) = ((x % n) == 0)
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
println(filter(nums, modN(2,_)))
println(filter(nums, modN(3,_)))
}
両方が同じ結果を与える
ソリューションカリー化使用します
これらの異なるアプローチは同等ですか?
誰かが私を啓発することができますか、それぞれに最適なユースケースは何ですか?
用語ニックネーム: 'modN(2、_)'は部分的な関数ではありません。これは、部分的に適用された関数*です。類似の名前にもかかわらず、同じものではありません。 http://sandrasi-sw.blogspot.com/2012/03/understanding-scalas-partially-applied.html –