Я хотел бы вычислить значение A(3, 20)
функции Аккермана (см. Википедию), которое должно быть 2^23 - 3 = 8388605
, используя Data.MemoCombinators
. Мой код:
{-# LANGUAGE BangPatterns #-}
import Data.MemoCombinators as Memo
ack = Memo.memo2 Memo.integral Memo.integral ack'
where
ack' 0 !n = n+1
ack' !m 0 = ack (m-1) 1
ack' !m !n = ack (m-1) $! (ack m (n-1))
main = print $ ack 3 20
Но он заканчивается ошибкой;-) Может ли он быть настроен или цепочка вычислений на самом деле так долго и даже memoization не может помочь?