SORU
7 Mart 2011, PAZARTESİ


gerçekten usul arasındaki farkı anlamak ve işlevsel

Gerçekten zor bir zaman prosedürel ve fonksiyonel programlama paradigmalar arasındaki farkı anlamakta güçlük çekiyorum.

Burada fonksiyonel programlama: Wikipedia girişindeki ilk iki paragraf

Bilgisayar bilimleri, fonksiyonel programlama paradigması bu hesaplama gibi davranır matematiksel fonksiyonların değerlendirilmesi ve devlet ve değişken veri önler. Bu uygulama vurgular fonksiyonlar, aksine hangi şart programlama stili vurguluyor durumu değiştirir.[1] Fonksiyonel programlama kökleri vardır lambda calculus, resmi bir sistem 1930'larda araştırmak için geliştirilen fonksiyon tanımı, fonksiyon uygulama ve özyineleme. Birçok fonksiyonel programlama dilleri olabilir üzerinde değerlendirmeler olarak kabul edilmelidir lambda calculus.[1]

Pratikte, bir arasındaki fark matematiksel fonksiyon ve kavram "işlev" zorunlu kullanılan bir programlama için önemli olduğu için fonksiyonları yan etkileri olabilir program devlet değerinin değiştirilmesi. Bu nedenle bilgi eksikliği yani şeffaflık aynı dili ifade farklı sonuçlanabilir farklı zamanlara bağlı olarak değerler çalıştırılan programın durumu. Diğer taraftan, fonksiyonel kod, bir fonksiyonun çıkış değeri değişir sadece giriş bağımsız değişkenler üzerinde bu işlev, bir işlev çağırma yani f ile aynı değeri iki kez x değişkeni aynı üretecek sonuç f(x) iki kez. Ortadan yan etkileri çok daha kolay yapabilirsiniz anlamak ve hareketlerini tahmin etmek için anahtarı olan bir program, gelişimi için motivasyonları işlevsel programlama.[1]

__

Paragraf 2 nerede yazıyor "Tersine, fonksiyonel kod, çıkış değeri bir fonksiyonu olarak değişir sadece üzerinde bağımsız değişkenler olan giriş fonksiyonu, arama fonksiyonu f iki kez aynı değer için bir değişken x aynı sonucu üretmek f(x) her ikisinde de."

Prosedürel programlama için aynı durum değil mi?

Bir usul vs için fonksiyonel göz göze ne yapmalıyım?

Şimdiden teşekkür ederiz, ve eğer bu böyle acemi bir soru ise özür dilerim.

CEVAP
12 Mart 2011, CUMARTESİ


İşlevsel Programlama

Fonksiyonel programlama değerleri gibi fonksiyonları tedavi etme gücünü ifade eder.

Düşünün bakalım bir benzetme ile "normal" değerleri. İki tam sayı değerlerini alıp yeni bir tamsayı elde etmek için operatörü kullanarak birleştirebiliriz. Veya kayan noktalı sayı bir tamsayı, kayan noktalı sayı almak için arttırabileceğimizi.

Fonksiyonel programlamada, iki işlevi değerleri yeni işlev bir değer compose lift gibi işleçler kullanarak üretmek için bir araya gelebiliriz. Veya fonksiyonu bir değer ve yeni bir veri değeri map fold gibi işleçler kullanarak üretmek için veri değeri toplayabiliriz.

Birçok dilde fonksiyonel programlama yetenekleri genellikle işlevsel Dil, düşünce değil hatta dil olduğunu unutmayın. Hatta Dedesi FORTRAN fonksiyonu birleştirerek operatörleri yolunda çok teklif etmedi, ancak işlevi değerleri destekledi. Bir dil"", büyük bir şekilde. fonksiyonel programlama yeteneklerini kucaklamak gerekiyor işlevsel olmasını

Yapısal Programlama

Prosedürel programlama bu talimatları kopyalama ve yapıştırma başvurmadan birçok yerden çağrılabilir, böylece bir prosedür haline talimatları ortak bir dizi saklanması için yeteneğini gösterir. Prosedür olduğunu çok erken gelişme, programlama, yeteneği hemen hemen değişmez bir şekilde bağlantılı olan tarzı programlama tarafından talep edilen makine veya montaj-programlama dili: bir tarzı vurguluyor fikri depolama yerleri ve talimatları veri taşıma arasında kalan yerler.

Kontrast

İki stilleri gerçekten birbirlerinden farklı olduklarını karşıtların değil. Tam iki stilleri (örneğin LİSP) kucaklamak dilleri vardır. Aşağıdaki senaryoyu iki stilleri bazı farklılıklar duygusu verebilir. Bakalım eğer listedeki tüm kelimeleri tek sayıda karakter olup olmadığını belirlemek için istediğimiz yere saçma sapan bir ihtiyaç için bazı kod yazmak. İlk olarak, usul stili:

function allOdd(words) {
  var result = true;
  for (var i = 0; i < length(words);   i) {
    var len = length(words[i]);
    if (!odd(len)) {
      result = false;
      break;
    }
  }
  return result;
}

Bu örnek anlaşılır verildi olarak kabul ediyorum. Şimdi, işlevsel stil:

function allOdd(words) {
  return apply(and, map(compose(odd, length), words));
}

İçten dışa çalışan, bu tanım şunları yapar:

  1. compose(odd, length) odd length fonksiyonlar bir dize uzunluğunu garip olup olmadığını belirleyen yeni bir işlev üretmek için birleştirir.
  2. map(..., words) words, sonuçta boolean değerleri yeni bir liste dönen her öğe için yeni bir işlev, karşılık gelen her kelimeyi tek sayıda karakter olup olmadığını gösteren çağırır.
  3. apply(and, ...) geçerlidir "ve" operatör sonuç listesi,ve-ıng booleans verim için birlikte tüm nihai sonucu.

Prosedürel programlama değerleri değişkenler olarak ortalıkta dolaşıyor, açıkça operasyonların nihai sonucu üretmek için gerekli tarif ile çok endişeli olduğunu bu örneklerden de görebilirsiniz. Buna karşılık, işlevsel stil fonksiyonları nihai çıkış için ilk giriş dönüştürmek için gerekli kombinasyonu vurgular.

Örnek de usule ilişkin karşı işlevsel bir kod tipik göreli Boyutunu gösterir. Ayrıca Muhakemesi Kanunu performans özellikleri işlevsel bir kod daha görmek daha kolay olabileceğini gösterir. Düşünün: işlevleri listedeki tüm kelimeleri uzunlukları hesaplamak, ya da her kes hemen önce bile uzunluğu kelimeyi bulduktan sonra mı? Diğer taraftan, fonksiyonel kodu öncelikle niyet çok açık bir algoritma ifade ettiğinden çok ciddi optimizasyon gerçekleştirmek için yüksek kaliteli bir uygulama izin verir.

Daha Fazla Okuma

Bu soru örneğin bir sürü... bakın gelir:

John' Turing ödülü anlatım çok detaylı fonksiyonel programlama motivasyonları dile getiriyor: . Backus

Can Programming Be Liberated from the von Neumann Style?

Gerçekten çok teknik, çok hızlı olur, çünkü bu bağlamda kağıt söz olmamalı. Ben sadece gerçekten temel olduğunu düşünüyorum, çünkü daha fazla dayanamadım.


- 2013 Eki

Yorumcular popüler modern diller ve prosedürel ve fonksiyonel programlama ötesinde diğer stilleri sunuyoruz. Bu tür diller genellikle aşağıdaki programlama stilleri bir veya daha fazla:

  • sorgu (örneğin, liste üreteçleri, dil ile tümleşik sorgu)
  • veri akışı (örneğin örtülü yineleme, toplu işlemler)
  • nesne yönelimli (örneğin kapsüllenmiş veri ve Yöntem)
  • dil odaklı uygulamaya özel sözdizimi, makrolar (örn

Aşağıdaki yorum bu tepki sözde kod örnekleri bu diğer stilleri imkanları mevcut yararlanabilir nasıl örnekler için bkz. Özellikle, usul örnek neredeyse tüm üst düzey uygulama yarar inşa edecek.

Sergilenen örnekler kasten tartışma altında iki stilleri arasındaki farkı vurgulamak için bu diğer programlama stilleri karıştırma kaçının.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ludique

    Ludique

    21 NİSAN 2009
  • Noam Erez

    Noam Erez

    3 NİSAN 2012
  • RawBrahs

    RawBrahs

    28 Aralık 2010