2016-11-05 41 views
0

我正在尝试做Haskell版本的2^n整数列表。 numsFrom生成无限序列,我想将此序列映射到数字2,但我有一条错误消息:Haskell 2^n函数式编程

可能的原因:'map'应用于太多参数。

numsFrom :: Int -> [Int] 
numsFrom n = n : numsFrom (n+1) 

powerOf2 :: Int -> [Int] 
powerOf2 = map(^numsFrom 1) 2 

回答

1

powerOf2签名必须是powerOf2 :: [Int]numsFrom返回一个列表映射,所以映射功能(2^)

powerOf2 :: [Int] 
powerOf2 = map (2^) (numsFrom 1) 

PD:请注意,您不需要numsFrom功能:

powerOf2 :: [Int] 
powerOf2 = map (2^) [1..] 
+3

'迭代(* 2)1' –

+2

注意'map(2 ^)[1 ..] == [2,4,8,16,...]'和'iterate(* 2)1 == [1,2,4,8,16, ...]略有不同。 'map'版本可以通过映射'[0 ..]'来代替'2^0';迭代版本可以通过从2开始而不是从1开始排除它。 – chepner