関数には再帰的な名前を付ける必要があるようです (それ自体を呼び出すため)。では、ラムダ関数はどのように再帰的になりますか?
ウィキペディアを検索したところ、これは「Yコンビネーター」で実行できると書かれています。私は数学理論のバックグループをあまり持っていません.「Yコンビネータ」が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’
失敗したようですが、「修正」キーワードを使用して期待したことを行うにはどうすればよいですか?