组合器和超级组合器有什么区别?

时间:2019-02-20 12:52:56

标签: haskell

组合器和超级组合器有什么区别?它们都不包含任何自由变量。我知道那是一回事。

1 个答案:

答案 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)不能是超级组合器