组合器和超级组合器有什么区别?它们都不包含任何自由变量。我知道那是一回事。
答案 0 :(得分:3)
超级组合器可以是常量,或者是组合器,其中仅包含超级组合器作为子表达式。
或更完整地说,
任何lambda表达式的格式为\ x1 x2 .. xn-> E,其中E不是 λ抽象且n≥0。 (请注意,如果表达式不是 lambda抽象,n = 0。)当且仅当:
- E中唯一的自由变量是x1..xn和
- E中的每个lambda抽象都是超级组合器。
组合器不包含任何自由变量,但是可能具有子表达式。 例如,来自Haskell Wiki: Super combinator
\f g -> f (\x -> g x 2)
外部lambda函数确实是组合器,因为它没有自由变量,但是它的子表达式\x -> g x 2
有一个自由变量(g
),因此它不是组合器。因此\f g -> f (\x -> g x 2)
不能是超级组合器