Pemahaman saya yang terbatas adalah:
1) Aplikasi Fungsi Parsial
Aplikasi Fungsi Parsial adalah proses mengembalikan fungsi yang membutuhkan jumlah argumen yang lebih sedikit. Jika Anda memberikan 2 dari 3 argumen, itu akan mengembalikan fungsi yang membutuhkan 3-2 = 1 argumen. Jika Anda memberikan 1 dari 3 argumen, itu akan mengembalikan fungsi yang membutuhkan 3-1 = 2 argumen. Jika Anda mau, Anda bahkan dapat menerapkan sebagian dari 3 argumen dan itu akan mengembalikan fungsi yang tidak menggunakan argumen.
Jadi diberikan fungsi sebagai berikut:
f(x,y,z) = x + y + z;
Saat mengikat 1 ke x dan menerapkannya sebagian ke fungsi di atas f(x,y,z)
Anda akan mendapatkan:
f(1,y,z) = f'(y,z);
Dimana: f'(y,z) = 1 + y + z;
Sekarang jika Anda mengikat y ke 2 dan z ke 3, dan menerapkan sebagian f'(y,z)
Anda akan mendapatkan:
f'(2,3) = f''();
Dimana f''() = 1 + 2 + 3
:;
Sekarang kapan saja, Anda dapat memilih untuk mengevaluasi f
, f'
atau f''
. Jadi saya bisa melakukan:
print(f''()) // and it would return 6;
atau
print(f'(1,1)) // and it would return 3;
2) Kari
Currying di sisi lain adalah proses pemisahan fungsi menjadi rantai bertingkat dari satu fungsi argumen. Anda tidak pernah dapat memberikan lebih dari 1 argumen, itu satu atau nol.
Jadi diberikan fungsi yang sama:
f(x,y,z) = x + y + z;
Jika Anda menjilatnya, Anda akan mendapatkan rantai 3 fungsi:
f'(x) -> f''(y) -> f'''(z)
Dimana:
f'(x) = x + f''(y);
f''(y) = y + f'''(z);
f'''(z) = z;
Sekarang jika Anda menelepon f'(x)
dengan x = 1
:
f'(1) = 1 + f''(y);
Anda dikembalikan fungsi baru:
g(y) = 1 + f''(y);
Jika Anda menelepon g(y)
dengan y = 2
:
g(2) = 1 + 2 + f'''(z);
Anda dikembalikan fungsi baru:
h(z) = 1 + 2 + f'''(z);
Akhirnya jika Anda menelepon h(z)
dengan z = 3
:
h(3) = 1 + 2 + 3;
Anda dikembalikan 6
.
3) Penutupan
Akhirnya, Penutupan adalah proses menangkap fungsi dan data bersama sebagai satu unit. Penutupan fungsi dapat mengambil 0 hingga jumlah argumen yang tak terbatas, tetapi juga mengetahui data yang tidak diteruskan ke argumen itu.
Sekali lagi, diberikan fungsi yang sama:
f(x,y,z) = x + y + z;
Anda malah bisa menulis penutupan:
f(x) = x + f'(y, z);
Dimana:
f'(y,z) = x + y + z;
f'
ditutup x
. Artinya f'
bisa membaca nilai x yang ada di dalamnya f
.
Jadi, jika Anda menelepon f
dengan x = 1
:
f(1) = 1 + f'(y, z);
Anda akan mendapatkan penutupan:
closureOfF(y, z) =
var x = 1;
f'(y, z);
Sekarang jika Anda menelepon closureOfF
dengan y = 2
dan z = 3
:
closureOfF(2, 3) =
var x = 1;
x + 2 + 3;
Yang akan kembali 6
Kesimpulan
Currying, aplikasi parsial dan penutupan semuanya agak mirip karena mereka menguraikan fungsi menjadi lebih banyak bagian.
Currying menguraikan fungsi argumen berganda menjadi fungsi bersarang dari argumen tunggal yang mengembalikan fungsi argumen tunggal. Tidak ada gunanya menjelajah fungsi satu atau kurang argumen, karena itu tidak masuk akal.
Aplikasi parsial menguraikan fungsi argumen berganda menjadi fungsi argumen yang lebih rendah yang argumennya yang hilang sekarang diganti dengan nilai yang disediakan.
Penutupan menguraikan fungsi menjadi fungsi dan dataset di mana variabel di dalam fungsi yang tidak diteruskan dapat melihat ke dalam dataset untuk menemukan nilai yang akan diikat ketika diminta untuk mengevaluasi.
Apa yang membingungkan tentang semua ini adalah bahwa mereka dapat jenis masing-masing digunakan untuk mengimplementasikan subset dari yang lain. Jadi pada intinya, mereka semua sedikit detail implementasi. Mereka semua memberikan nilai yang sama di mana Anda tidak perlu mengumpulkan semua nilai di muka dan bahwa Anda dapat menggunakan kembali bagian dari fungsi, karena Anda telah menguraikannya menjadi unit-unit yang bijaksana.
Penyingkapan
Saya sama sekali bukan ahli topik, saya baru saja mulai belajar tentang ini, dan jadi saya memberikan pemahaman saya saat ini, tetapi bisa saja ada kesalahan yang saya undang untuk Anda tunjukkan, dan saya akan mengoreksi sebagai / jika Saya menemukan apa pun.