简体   繁体   中英

how to do this in haskell ? [x^0,x^1,x^2,x^3 …]

i want to have a list like this one

[x^0,x^1,x^2,x^3 ...] 

is it possible to have such a list

for example

 ex : x = 2   [1,2,4,8,16,32 ..] 

You can use iterate or unfoldr to double a number many times. This could be more efficient than computing x^n for each n .

Below, I use x=2 , but you can use any 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]

Also beware that bounded integer types such as Int will overflow pretty fast in this way.

Yes, it is pretty easy thing to do in haskell.

You create an infinite stream of positive numbers and then map over them with function n ↦ x^n

f :: Num a => a -> [a]
f x = fmap (\n -> x^n) [0..]

> take 10 (f 2)

[1,2,4,8,16,32,64,128,256,512]

In Haskell, the list is linear no matter the progression. By linear, I mean non-recursive. The elements in the list are not dependent on one or more previous elements or an initial element.

In Haskell such lists are used very much. In Haskell there are two primary facilities for producing such lists. The first is map and it is effective without any filtering or recursion.

f b n = map (b^) [0..n]

The second is the list comprehension

f b n = [b^x|x<-[0..n]]

In both it is simple to set the limit or number of elements in the result. These could both be made into infinite lists if desired by excluding the n in both the left and right side of the equations.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM