anonim lambda fonksiyonları (fonksiyonel programlama)


10

Anonim (lambda) fonksiyonlar nelerdir? İşlevsel bir programlama dilinde anonim bir işlevin biçimsel tanımı nedir?

Basit bir deyişle, şema / lisp programlarken anonim (lambda) işlevinin tanımlayıcıya bağlı olmayan bir işlev olduğunu söyleyebilirim.

Bir lambda fonksiyonu hakkında resmen söyleyebileceğin bu mu? Bu basit tanıma eklenebilecek daha fazla ayrıntı olduğunu düşünüyorum. Lütfen detaylandırın ve teşekkürler!


Yanıtlar:


10

Bana göre, onlar hakkında gerçekten söyleyebileceğiniz tek şey bu.

Fikir şu ki, daha üst düzey bir dilde, bir fonksiyon sadece başka bir değerdir. C'de bir tanımlayıcı olmadan (3 + 4) sahip olabileceğiniz gibi, şemada bir tanımlayıcı olmadan da (lambda (x) + (3 x))) elde edebilirsiniz.

Buradaki anahtar, anonim işlevler hakkında özel bir şey olmaması değildir. Yalnızca işlev gerektiren diğer dillerin kısıtlamaları diğer değerlerden farklı olarak ele alınır. Özel tanımlar, izin vermeyen prosedürel diller içindir, işlevsel diller için değil.


11

Lambda hesabında, tüm işlevler (terimler) anonimdir. Bu lambda hesabının önemli bir özelliğidir: daha basit olanlardan karmaşık isimler vermeden karmaşık fonksiyonlar oluşturabilirsiniz.

Programlama dillerinde, çoğu durumda işlevlere ad vermek istenir, çünkü bu bizim düşündüğümüz yol ve kodun insanlar için okunabilir olmasını sağlar. Ancak derleme, yürütülebilir dosya oluştururken (hata ayıklama bilgilerini dikkate almazsak) adları kaldırır.

Bir dil anonim işlevlerin (adsız işlevler) ifade edilmesine izin veriyorsa, hem programcılara hem de derleyicilere bir avantaj sağlayabilir: Programcılar genellikle daha kısa kod yazabilir ve derleyiciler anonim bir işlevin sadece verilen anda kullanıldığını bilerek daha iyi optimize edebilir başka bir yerde değil.


1

Sorunuzun hangi kısmına vurgu yaptığınıza bağlıdır. Özellikle anonim işlevler için anonim olmanın özelliği ise, o zaman gerçekten tek cevap bunların sınırsız değerler olmasıdır . Genel olarak işlevler hakkında konuşuyorsanız, anonim işlevler muhtemelen pratik diller için fonksiyonel bir ortamda lambda hesabı kullanımının en görünür tezahürüdür .

Aslında, lambda hesabı açısından lambda ifadeleri, bağlar oluşturmak için kullanılan çok sözdizimsel yapıdır. Lambda hesabında kullanılan gösterimi hatırlayın:

λf.λx.fx

fxfx

Bir dil genellikle let(ML gibi diller, şema) veya define(şema) gibi üst düzeyde kullanılabilir (veya sözdizimsel yapılar içinde modüller veya nesneler gibi işlevlerden daha karmaşık) bağlantılar oluşturmak için yollar sunar , ancak bağlamalar düşük seviyelerde lambdadır.

Eğer şema veya lisp lehçeleri gibi dillere bakarsanız, onların temelleri lambda hesabıdır ve birçok özel form gerçekten şeker kaplı lambdalardır.

İçin birleştirmeli dillere , hikaye biraz farklıdır. Lambdalar gerekli değildir ve aslında karşı üretkendir. Her şey bir işlev olduğunda, anonim lambdaları tanımlamanın anlamı nedir ?

Bu iki tür mangan arasında bir şekilde bir ikilik vardır. İkincisi noktadan bağımsız fonksiyon kombinasyonuna odaklanır ve böylece her şeyi fonksiyon olarak temsil etmeye çalışır, birincisi daha ayrıntılı bir hesap üzerinde çalışır ve dilin diğer değerleri gibi birinci sınıf değerler olarak fonksiyonlara sahip olma çabası gösterir. Bu bakımdan, lambdalar bu çabanın sonucu olarak görülebilir.

Konuyla ilgili bazı işaretçiler bu cevapta (yetersiz) ortaya çıktı:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.