これは 7 か月前からの古い質問です。スタック オーバーフロー者は、アッカーマン関数の計算における Haskell の非効率性はコンパイラ エラーによるものであることに同意しました。
Haskell/GHC では Ackermann は非常に効率が悪い
7 か月後、これは修正されたようです。ack は線形メモリで実行されるように見えますが、実行速度は非常に遅いです。
main = print (ack 4 1)
-- Ackermann function
ack 0 n = n + 1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n - 1))
$ time ./ack
65533
>real 8m53.274s
>user 8m47.313s
>sys 0m4.868s
Processor 2.8 GHz Intel Core i7
Memory 8 GB 1333 MHz DDR3
Software Mac OS X Lion 10.7.5 (11G63)
これについての洞察を求めているだけです。より詳細なものは支持されます。私は関数型プログラミングに不慣れであり、末尾再帰と通常の再帰に関する簡単な発言でさえも高く評価され、賛成されることを覚えておいてください。