不動點組合子

不動點組合子 ( 或不動點算子 ） 是計算其他函數的一個不動點的高階函數 。 函數 f 的不動點是將函數應用在輸入值 x 時 ， 會傳回與輸入值相同的值 ， 使得 f ( x ) = x 。 例如 ， 0 和 1 是函數 f ( x ) = x2 的不動點 ， 因爲 02 = 0 而 12 = 1 。 鑑於一階函數 （ 在簡單值比如整數上的函數 ） 的不動點是個一階值 ， 高階函數 f 的不動點是另一個函數 g 使得 f ( g ) = g 。 那麼 ， 不動點算子 fix 的定義是 使得對於任何函數 f 不動點組合子它們可以用非遞歸的 lambda抽象來定義 ， 在 lambda演算中的函數都是匿名的 。 然而在命令式編程語言中的遞歸 ， 或許限制只能以呼叫函數名稱作爲參數來實作 。 在函數式編程語言中的不動點 ， 以 lambda抽象來定義的Y組合子爲 ： 則允許匿名函數足夠逹成遞歸的作用 ， 即遞歸函數 。 應用於帶有一個變量的函數 ， Y組合子通常不會終止 。 將 Y組合子應用於二或更多個變量的函數 ， 會獲得更有趣的結果 。 第二個變量可當作計數器或索引 。 由此產生的函數行爲 ， 表現出如命令式語言中一個while或for迴圈 。 這個組合子也是 Curry悖論的核心 ， 演示了無型別的 lambda演算是一個不穩固的推論系統 ， 因由 Y組合子允許一個匿名錶達式來表示零或者甚至許多值 ， 這在數理邏輯上是不一致的 。