我有这段代码:
ghci>let listOfFuns = map (*) [0..]
ghci>(listOfFuns !! 4) 5
20
这是什么!!意思?
我看到了关于这样的双重感叹的例子:
ghci的> [1,2,3,4] !! 1 ghci> 2
但似乎不适用于我的问题示例。
答案 0 :(得分:41)
!!
索引列表。它需要一个列表和一个索引,并返回该索引处的项目。如果索引超出范围,则返回⊥。
答案 1 :(得分:1)
可能会发现等价思维更容易
let listOfFuns = map (*) [0..] in (listOfFuns !! 4) 5
== (map (*) [0..] !! 4) 5
== (map (*) [0, 1, 2, ...] !! 4) 5
== ([(0*), (1*), (2*), ...] !! 4) 5
== (4*) 5
== 20
你可以在这里看到 map (*) [0..]
是一个 [Int → Int],所以当你取它的第三个元素时(这就是 !! 4
所做的)你得到一个函数 Int → Int。最后 5 应用于该函数,得到 20。