haskell - 什么是 "free variable"?

标签 haskell functional-programming lambda-calculus

(我确信这个网站上一定已经回答了这个问题,但是搜索结果被在 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)

但前提是xg中不是自由的(即它没有被使用或者是一个参数)。否则我们将创建一个引用未知变量的表达式:

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

关于haskell - 什么是 "free variable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857038/

相关文章:

performance - GHC 产生冗余核心操作

haskell - 一个纯函数可以有自由变量吗?

java - 流和功能接口(interface): throw exception inside stream and aggregate them

functional-programming - SKI微积分和BCKW的实际应用

list - Haskell:创建列表评估列表元素

haskell - 是否可以在 GADT 定义中使用类型别名?

Java、流、收集器、函数式编程 : How to make a double entry map?

functional-programming - Coq:使用归纳法证明两个阶乘函数相等

lambda-calculus - 为什么需要在 λ 演算中引入 Ycombinator?

functional-programming - 查询 Lambda 演算中的 bool 值