Haskell中的双重惊叹号

时间:2014-06-26 03:33:29

标签: haskell

我有这段代码:

ghci>let listOfFuns = map (*) [0..]
ghci>(listOfFuns !! 4) 5
20
  1. 这是什么!!意思?

    我看到了关于这样的双重感叹的例子:

    ghci的> [1,2,3,4] !! 1 ghci> 2

  2. 但似乎不适用于我的问题示例。

    1. 如何理解这个功能。需要解释。

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。

相关问题