Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中的索引列表元素_Haskell - Fatal编程技术网

Haskell中的索引列表元素

Haskell中的索引列表元素,haskell,Haskell,我在看一个学生解决家庭作业问题的方法。基本上,这个问题要求列表中的其他元素加倍,Evan的解决方案是: -- Exercise 3 ----------------------------------------- -- Double every second number in a list starting on the left. doubleEveryOther :: [Integer] -> [Integer] doubleEveryOther = zipWith (\x

我在看一个学生解决家庭作业问题的方法。基本上,这个问题要求列表中的其他元素加倍,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::Integer)…]
是从1开始的所有整数的列表。
::Integer
指定类型

接下来的问题是:
[(1::Integer)]
中的元素将成为
x
的值。调用函数
doubleEveryOther
的列表将提供
y
的值。因此,第一个列表基本上只是用作基于1的索引。

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


接下来的问题是:
[(1::Integer)]
中的元素将成为
x
的值。调用函数
doubleEveryOther
的列表将提供
y
的值。因此,第一个列表基本上只是用作基于1的索引。

谢谢。是否必须指定类型(整数)?@user245954否,不必指定。
mod
函数帮助编译器推断此处的类型:
mod:(积分a)=>a->a->a
。换言之,不管你把什么类型的类型放在那里,只要它是整数,但是这个约束已经被
zipWith
@Undreren传递的函数强制执行了,我不同意。
mod
的类型没有明确定义
1
的类型,因此如果没有注释,GHC必须应用一个默认值,它可能不同于
Integer
@chi,但这并不重要。没有它,它在GHCi运行良好。在写评论之前我已经测试过了。谢谢。是否必须指定类型(整数)?@user245954否,不必指定。
mod
函数帮助编译器推断此处的类型:
mod:(积分a)=>a->a->a
。换言之,不管你把什么类型的类型放在那里,只要它是整数,但是这个约束已经被
zipWith
@Undreren传递的函数强制执行了,我不同意。
mod
的类型没有明确定义
1
的类型,因此如果没有注释,GHC必须应用一个默认值,它可能不同于
Integer
@chi,但这并不重要。没有它,它在GHCi运行良好。我在写评论之前测试了它。仅供参考,
zipWith($)(cycle[(2*),id])
也可以工作,而且可能更高效(不需要计算
mod
)。仅供参考,
zipWith($)(cycle[(2*),id])
也可以工作,而且可能更高效(不需要计算
mod
)。