Saya telah membaca artikel tentang pemrograman Fungsional setiap hari dan berusaha menerapkan beberapa praktik sebanyak mungkin. Tapi saya tidak mengerti apa yang unik dalam aplikasi kari atau aplikasi parsial.
Ambil kode Groovy ini sebagai contoh:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Saya tidak mengerti apa perbedaan antara tripler1
dan tripler2
. Bukankah keduanya sama? 'Currying' didukung dalam bahasa fungsional murni atau parsial seperti Groovy, Scala, Haskell dll. Tapi saya dapat melakukan hal yang sama (kari-kiri, kari-kanan, kari-n, atau aplikasi sebagian) dengan hanya membuat nama lain atau anonim fungsi atau penutupan yang akan meneruskan parameter ke fungsi asli (seperti tripler2
) di sebagian besar bahasa (bahkan C.)
Apakah saya melewatkan sesuatu di sini? Ada tempat-tempat di mana saya dapat menggunakan aplikasi currying dan parsial dalam aplikasi Grails saya tetapi saya ragu untuk melakukannya karena saya bertanya pada diri sendiri "Apa bedanya?"
Tolong beri tahu saya.
EDIT: Apakah kalian mengatakan bahwa aplikasi parsial / currying hanya lebih efisien daripada membuat / memanggil fungsi lain yang meneruskan parameter default ke fungsi asli?
f x y = x + y
berarti itu f
adalah fungsi yang mengambil satu parameter int. Hasil dari f x
( f
diterapkan ke x
) adalah fungsi yang mengambil satu parameter int. Hasilnya f x y
(atau (f x) y
, yaitu f x
diterapkan ke y
) adalah ekspresi yang tidak mengambil parameter input dan dievaluasi dengan mengurangi x + y
.