(我确信这个网站上一定已经回答了这个问题,但是搜索结果被在 C 中的变量上调用 free() 的概念淹没了。)
我遇到了“eta 缩减”这个术语,它的定义类似于 f x = M x ==> M
如果 x “在 M 中不自由”。我的意思是,我想我理解它想要表达的要点,这似乎就像将函数转换为无点样式时所做的那样,但我不知道关于 x 不自由的限定符意味着什么。
最佳答案
这是一个例子:
\f -> f x
在此 lambda 中,x
是一个自由变量。基本上,自由变量是 lambda 中使用的变量,但它不是 lambda 参数之一(或 let
变量)。它来自 lambda 上下文之外。
Eta 减少意味着我们可以改变:
(\x -> g x) to (g)
但前提是x
在g
中不是自由的(即它没有被使用或者是一个参数)。否则我们将创建一个引用未知变量的表达式:
(\x -> (x+) x) to (x+) ???
关于haskell - 什么是 "free variable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857038/