X 1 , x 2 ,…, x n bağımsız değişkenlerini alan bir f işlevine sahip olmak
- yani. f: X 1 × X 2 ×… × X n → Y
- currying yeniden tanımlar f bir fonksiyonu olarak tek bir argüman alarak bir 1 daha başka bir işleve eşleştirir. Bu teknik, örneğin pow
yazabileceğimiz kavisli bir işlevle kısmi uygulama için yararlıdır exp = pow(e)
.
Misal
Aşağıdaki f işlevini üç argümanla ele aldığımızı varsayarsak ( f: X 1 × X 2 × X 3 → Y ):
def f(a,b,c):
return a + b * c
Bu işlevi kürlemek bizi f_curry ile bırakır: X 1 → (X 2 → (X 3 → Y)) , eğer şimdi bu işlevi iki kez çağırırsak , aşağıdakine eşdeğer f_curry(1)(2)
bir işlev ( h
) elde ederiz :
def h(c):
return 1 + 2 * c
Curried işlevi f
şu şekilde yazılabilir (Python 3):
def f_curry(a):
def g_curry(b):
def h(c):
return a + b * c
return h
return g_curry
Meydan okuma
Zorluğunuz yukarıda açıklandığı gibi bir işlevi körüklemek olacaktır, işte kurallar:
- Giriş, en az 2 bağımsız değişken alan bir kara kutu işlevi olacaktır
- Giriş işlevi her zaman sabit sayıda argümana sahip olacaktır (aksine
printf
ya da benzer, not: herhangi bir sayıda bağımsız değişkeni olan işlevleri desteklemeniz gerekir ≥2) - Dilinizde varsayılan olarak curried işlevler kullanılıyorsa (örn. Haskell), giriş işlevinin "üst düzey işlev" yerine N- kümeleri üzerinde tanımlanmasını bekleyebilirsiniz.
- Bağımsız değişken sayısını girdi olarak alabilirsiniz
- Çıktı, girdinin curried eşdeğeri olacaktır *
- Çıktı işlevinin yalnızca şu şekilde olacağını varsayabilirsiniz:
- giriş işlevinin aldığı bağımsız değişken sayısına eşit veya daha az olarak çağrıldı
- doğru türde argümanlar ile çağrıldı
* Bu f
, N
bağımsız değişkenleri olan bir girdi ve h
geçerli tüm bağımsız değişkenler için geçerli olan bir çıktı anlamına a1,…,aN
gelir f(a1,a2,…,aN) == h(a1)(a2)…(aN)
.
def f(a,b,c): return a + b * c
ve çıkış def f_curry(a): def g_curry(b): def h(c): return a + b * c return h return g_curry
?
f
(bir yerde tanımlanır) olur ve çıktı buna eşdeğer bir şey olmalıdır f_curry
. Veya girdi olur lambda a,b,c: a+b*c
ve çıktı eşdeğer bir fonksiyon olur f_curry
.