Вы можете использовать iterate
или unfoldr
, чтобы удвоить число много раз. Это может быть более эффективным, чем вычисление x^n
для каждого n
.
Ниже я использую x=2
, но вы можете использовать любой x
.
> take 10 $ iterate (*2) 1
[1,2,4,8,16,32,64,128,256,512]
> take 10 $ unfoldr (\x -> Just (x,2*x)) 1
[1,2,4,8,16,32,64,128,256,512]
Также следует помнить, что ограниченные целочисленные типы, такие как Int
, будут таким образом довольно быстро переполняться.