Sınırlı anlayışım şöyle:
1) Kısmi Fonksiyon Uygulaması
Kısmi İşlev Uygulaması , daha az sayıda argüman alan bir işlev döndürme işlemidir. 3 argümandan 2'sini verirseniz, 3-2 = 1 argümanını alan bir işlev döndürür. 3 argümandan 1 tanesini verirseniz, 3-1 = 2 argümanını alan bir işlev döndürür. İsterseniz, 3 argümandan 3'ünü bile kısmen uygulayabilirsiniz ve argüman almayan bir işlev döndürür.
Yani aşağıdaki işlevi verilen:
f(x,y,z) = x + y + z;
1'i x'e bağladığınızda ve bunu yukarıdaki fonksiyona kısmen uyguladığınızda f(x,y,z)
:
f(1,y,z) = f'(y,z);
Nerede: f'(y,z) = 1 + y + z;
Şimdi, y'yi 2'ye ve z'yi 3'e bağlamak ve kısmen uygulamak f'(y,z)
olsaydı , şunları elde edersiniz:
f'(2,3) = f''();
Nerede f''() = 1 + 2 + 3
:;
Şimdi herhangi bir noktada f
, f'
veya seçebilirsiniz f''
. Böylece yapabilirim:
print(f''()) // and it would return 6;
veya
print(f'(1,1)) // and it would return 3;
2) Currying
Öte yandan, Currying , bir fonksiyonu bir argüman fonksiyonunun iç içe geçmiş bir zincirine bölme işlemidir. Asla 1'den fazla argüman sağlayamazsınız, bir veya sıfırdır.
Yani aynı işlevi verilen:
f(x,y,z) = x + y + z;
Körlenmiş olursanız, 3 fonksiyondan oluşan bir zincir alırsınız:
f'(x) -> f''(y) -> f'''(z)
Nerede:
f'(x) = x + f''(y);
f''(y) = y + f'''(z);
f'''(z) = z;
Eğer ararsanız Şimdi f'(x)
ile x = 1
:
f'(1) = 1 + f''(y);
Size yeni bir işlev döndürülür:
g(y) = 1 + f''(y);
Eğer ararsanız g(y)
ile y = 2
:
g(2) = 1 + 2 + f'''(z);
Size yeni bir işlev döndürülür:
h(z) = 1 + 2 + f'''(z);
Aradığınızda Nihayet eğer h(z)
ile z = 3
:
h(3) = 1 + 2 + 3;
Sen döndürülür 6
.
3) Kapanış
Son olarak, Kapatma , bir fonksiyonu ve verileri tek bir ünite olarak bir araya getirme işlemidir. Bir işlev kapatması sonsuz sayıda argüman almak için 0 alabilir, ancak aynı zamanda kendisine iletilmeyen verilerin de farkındadır.
Yine, aynı işlevi verilen:
f(x,y,z) = x + y + z;
Bunun yerine bir kapatma yazabilirsiniz:
f(x) = x + f'(y, z);
Nerede:
f'(y,z) = x + y + z;
f'
kapatıldı x
. f'
İçindeki x değerini okuyabilen anlam f
.
Yani eğer aramak idi f
ile x = 1
:
f(1) = 1 + f'(y, z);
Bir kapanış olur:
closureOfF(y, z) =
var x = 1;
f'(y, z);
Şimdi ve closureOfF
ile y = 2
aradıysanız z = 3
:
closureOfF(2, 3) =
var x = 1;
x + 2 + 3;
Hangisi dönecekti 6
Sonuç
Körleme, kısmi uygulama ve kapaklar, bir işlevi daha fazla parçaya ayırmalarından dolayı benzerdir.
Currying, çoklu argümanların bir fonksiyonunu, tek argümanların fonksiyonlarını döndüren tek argümanların iç içe geçmiş fonksiyonlarına ayırır. Bir ya da daha az tartışmanın bir fonksiyonunu köretmenin anlamı yoktur, çünkü mantıklı değildir.
Kısmi uygulama, çoklu argümanların bir fonksiyonunu şimdi eksik argümanları verilen değer ile değiştirilen daha az argümanların bir fonksiyonuna ayrıştırır.
Kapatma, bir işlevi bir işleve ayırır, işlevin içindeki değişkenlerin girilmediği durumlarda değerlendirmek istendiğinde bağlanacak bir değer bulmak için veri kümesinin içine bakabilir.
Tüm bunlar hakkında kafa karıştırıcı olan şey, her birinin diğerlerinin bir alt kümesini uygulamak için kullanılabileceğidir. Yani özünde, hepsi bir uygulama detayı. Hepsi aynı değerleri sağlar; çünkü tüm değerleri önceden toplamanıza gerek yoktur ve işlevin bir bölümünü yeniden kullanabilmeniz gerekir, çünkü bunu gizli birimlere ayırırsınız.
ifşa
Ben konunun uzmanı değilim, sadece son zamanlarda bunları öğrenmeye başladım ve bu yüzden şu anki anlayışımı sağlıyorum, ancak sizi belirtmeye davet ettiğim hatalar olabilir ve / if gibi düzelteceğim Ben herhangi birini keşfederim.