Haskell"fix"关键字在声明递归lambda函数时失败

vik*_*ata 1 recursion lambda haskell fixpoint-combinators

似乎函数应该具有递归的名称(为了调用自身),那么lambda函数如何递归?

我搜索了维基百科,它说这可以通过"Y-combinator"来完成.我没有太多的数学理论背景,只是告诉我"Y-combinator"是由Haskell自己发现的.在Haskell语言中称为"fix"关键字,我试过:

Prelude> let fact = fix (\f n -> if n == 0 then 1 else n * (f (n-1)))

<interactive>:17:12: Not in scope: ‘fix’
Run Code Online (Sandbox Code Playgroud)

似乎失败,但如何使用"修复"关键字来做我所期望的?

Seb*_*edl 12

fix不是关键字,它是Data.Function模块中定义的函数.因此,要使用它,您必须导入该模块.

import Data.Function
Run Code Online (Sandbox Code Playgroud)

或在GHCi中:

:m Data.Function
Run Code Online (Sandbox Code Playgroud)