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

  • audivila

    audivila

    5 HAZİRAN 2009
  • LAHWF

    LAHWF

    5 Kasım 2009
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009