SORU
20 EKİM 2008, PAZARTESİ


Tımar ve kısmi uygulama arasındaki fark nedir

Tam olarak kelime bu soruya nasıl emin değilim.

Üniversitenin ilk yılında ne olduğunu öğrendim, ve uygunsa onu kullanıyoruz o zamandan beri.

Ancak, ben oldukça sık internette tımar diğer halklar örnekler değil tımar çeşitli şikayetler görmek, ama aslında sadece kısmi bir uygulama vardır.

Kısmi uygulama ya da tımar olan farklılıkların makul bir açıklama buldum. Eşdeğer örnekler bazı yerlerde tımar olarak tarif edilen genel bir karışıklık, ve diğerleri kısmi uygulama var.

Birisi her iki terim tanımı ve nasıl farklı detayları ile bana sağlayabilir?

CEVAP
20 EKİM 2008, PAZARTESİ


Tımar tek bir işlevi haline gelmiştirntartışmalar içinentek bir argüman her ile çalışır. Verilen aşağıdaki fonksiyon:

function f(x,y,z) { z(x(y));}

Ne zaman körili olur:

function f(x) { lambda(y) { lambda(z) { z(x(y)); } } }

F(x,y,z) tam uygulama için, bu yapmanız gereken:

f(x)(y)(z);

Çok fonksiyonel diller f x y z yazalım. Eğer sadece f x y arama veyaf(x)(y)o zaman kısmen uygulanan işlevi-dönüş değeri lambda(z){z(x(y))} kapatılması—kabul değerleri ile x ve y 10 ** olsun.

Kısmi uygulamayı kullanmak için bir yol genelleştirilmiş fonksiyonların kısmi uygulamalar, gibi işlevleri tanımlamaktırkat:

function fold(combineFunction, accumalator, list) {/* ... */}
function sum     = curry(fold)(lambda(accum,e){e accum}))(0);
function length  = curry(fold)(lambda(accum,_){1 accum})(empty-list);
function reverse = curry(fold)(lambda(accum,e){concat(e,accum)})(empty-list);

/* ... */
@list = [1, 2, 3, 4]
sum(list) //returns 10
@f = fold(lambda(accum,e){e accum}) //f = lambda(accumaltor,list) {/*...*/}
f(0,list) //returns 10
@g = f(0) //same as sum
g(list)  //returns 10

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011
  • VJ VIMANA

    VJ VIMANA

    3 Mayıs 2007