在Haskell中索引列表元素

时间:2016-08-02 07:37:56

标签: haskell

我正在@evansb查看CIS 194解决家庭作业问题的方法。基本上,问题要求将列表中的所有其他元素加倍,Evan的解决方案就是:

-- Exercise 3 -----------------------------------------

-- Double every second number in a list starting on the left.
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther = zipWith
  (\x y -> if x `mod` 2 == 0 then y * 2 else y) [(1::Integer)..]

我对(1::Integer)感到困惑,1引用了第一个索引吗?那么在lambda函数中x对应于索引而y对应于该索引处的实际元素?

1 个答案:

答案 0 :(得分:5)

[(1::Integer)..]是从1开始的所有整数的列表。::Integer指定类型。

对于您的其余问题:[(1::Integer)..]中的元素将成为x的值。调用函数doubleEveryOther的列表将提供y的值。所以第一个列表基本上只用作基于1的索引。

相关问题