2012-01-13 19 views
20

(Bu sitedeki bu yanıtın zaten yanıtlandığını bildiğim halde arama ücretsizdir.) (Bu, C'deki bir değişkendeki free() değişkeninin çağrılmasıyla doludur.)"Serbest değişken" nedir?

"eta redüksiyon" terimi ile karşılaştım. x "M'de boş değil" ise f x = M x ==> M gibi bir şey tanımlanmıştır. Demek istediğim, söylemeye çalıştığı şeyin özünü anladım, bir işlevi noktadan arındırılmış bir forma dönüştürdüğünüzde yaptığınız gibi görünüyor, ama x'in niteleyici olmasının ne demek olduğunu bilmiyorum.

cevap

27

İşte bir örnek: Bu lambda olarak

\f -> f x 

, x ücretsiz bir değişkendir. Temel olarak serbest bir değişken lambdada lambda argümanlarından biri (veya bir let değişken) olmayan bir değişkendir. Bu lambda bağlamından geliyor.

(\x -> g x) to (g) 

Ancak burada x serbest değildir (diğer bir deyişle bu kullanılmaz ya da bir argümandır) g içinde:

Eta indirgeme değişebileceğini anlamına gelir.

(\x -> (x+) x) to (x+) ??? 
+2

Küçük nitpick: Eğer bağlıysa, x'in kullanılması iyi olabilir. Eta-redüksiyon '(\ x -> (\ x -> x + x) x)' ile '' '(\ x -> x + x)' '(\ x -> x + x)' olsa bile x'in iki kullanımını içerir. Bu, insan tarafından yazılmış bir kodla uğraşmayacak bir köşe vakasıdır, ancak derleyicilerin daha sık karşılaşacağını hayal ediyorum. – yatima2975

+0

Buradaki ifadeleri karıştırdım. "Ama eğer x" kullanılmazsa (yani özgür olmazsa) "olmalıdır" Ama "x" özgür değilse (yani kullanılmazsa ya da bir argüman ise) ". Aslında bu şekilde yazdım ama onu daha basit hale getirmek için değiştirdim. Ne yazık ki bu anlamını değiştirdi :) – porges

9

Peki, here's the relevant Wikipedia article, bu değer ne için: Aksi takdirde bir bilinmeyen değişkene referans veren bir ifade oluşturarak olurdu. Kısa versiyon, bu tür tanımların, "M" gibi bir yer tutucu kullanılarak bir lambda ifadesinin gövdesine elverişli olmasıdır ve bu nedenle, bu lambda tarafından bağlanan değişkenin, yer tutucunun temsil ettiği her yerde kullanılmadığını belirtmek zorundadır.

Yani, bir "serbest değişken" Burada kabaca bazı belirsiz veya bilinmeyen dış alanda tanımlı bir değişken demektir. - örneğin, \y -> x + y gibi bir ifadede, x ücretsiz bir değişkendir ama y değil.

Eta azaltma, gereksiz bir ciltleme katmanının çıkarılması ve hemen bir değişken uygulanmasının (ki muhtemelen tahmin edeceğiniz gibi) yalnızca söz konusu değişkenin yalnızca bu yerde kullanıldığı durumlarda geçerli olmasıyla ilgilidir.

İlgili konular