(我確定這個網站上已經有這個答案了,但是搜索被C中的一個變量調用free()的概念所淹沒。)我遇到了「eta還原」這個術語,如果x是「M中不空閒」,則定義爲f x = M x ==> M
。我的意思是,我認爲我理解它要說的內容的要點,看起來就像你將一個函數轉換爲無點風格時所做的一樣,但我不知道x是不是免費的限定詞意味着什麼。什麼是「自由變量」?
20
A
回答
27
下面是一個例子:
\f -> f x
在這種拉姆達,x
是自由變量。基本上一個自由變量是一個變量,用於不是lambda的參數(或變量let
)之一的lambda中。它來自lambda的上下文之外。
埃塔減少意味着我們可以改變:
(\x -> g x) to (g)
但是,只有當x
不是免費的(即,它不使用或是一個參數)中g
。否則,我們就可以創造它是指一個未知變量的表達式:
(\x -> (x+) x) to (x+) ???
9
好,here's the relevant Wikipedia article,什麼是值得。
簡短的說法是,這樣的定義使用像「M」這樣的佔位符消除了lambda表達式的主體,因此必須額外指定該lambda綁定的變量沒有在佔位符表示的任何地方使用。
所以,一個「自由變量」在這裏是指大致在一些模糊的或未知的外範圍內定義的變量 - e.g,在像\y -> x + y
一個表達式,x
是自由變量但y
不是。
Eta減少是關於刪除一個多餘的綁定層,並立即應用一個變量,這是(如你可能想象的那樣)只有在有問題的變量僅用於那個地方時纔有效。
相關問題
- 1. 什麼是自由變量?
- 2. Python中自由變量的搜索順序是什麼?
- 3. 自動變量的好處是什麼?
- 4. 什麼是變量?
- 5. 什麼是「變量=變量|| {}」在JavaScript
- 6. 什麼是這種變量$變量
- 7. 變量++和變量是什麼意思?
- 8. 什麼是const變量?
- 9. 什麼是「安全變量」?
- 10. 什麼是純變量?
- 11. 什麼是實例變量?
- 12. 這是什麼變量`instantiated`
- 13. 什麼是可變常量?
- 14. 爲什麼變量是NULL?
- 15. 什麼是以下變量?
- 16. 什麼是新的變量
- 17. 什麼是vim的@@變量?
- 18. 什麼是可選變量?
- 19. Python自由變量。爲什麼這會失敗?
- 20. 是一個綁定變量或一個自由變量?
- 21. Coq中的自由變量
- 22. 變量=自我意味着什麼?
- 23. 什麼是由dumpsys
- 24. 什麼是由Hibernate
- 25. 什麼是原子變量,它的用法是什麼?
- 26. 爲什麼ruby常量是可變的?變量有什麼區別?
- 27. 爲什麼改變平方點自由變更類型
- 28. 什麼是Knockout自定義綁定「之後」變量?
- 29. 什麼是自動和寄存器變量?
- 30. 爲什麼readonly字符串變量是自動分配的String.Empty(「」)?
Minor nitpick:如果綁定了'x',可以使用。儘管'(\ x - > x + x)'減少了'(\ x - >(\ x-> x + x)x)'到'(\ x - > x + x)包含'x'的兩個用法。這是一個角落案例,在處理人工編寫的代碼時不會顯示太多內容,但我想編譯器會更頻繁地運行它。 – yatima2975 2012-01-14 15:51:08
我搞砸了那裏的措辭。 「但是,只有當'x'沒有被使用(即不是空閒的)」時,「應該是」但是隻有當'x'不是空閒的(即它沒有被使用或者是一個參數)「。我原本是這樣寫的,但改變了它,使其更簡單。不幸的是,改變了意義:) – porges 2012-01-14 23:13:27