(我确定这个网站上已经有这个答案了,但是搜索被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