【问题标题】:Double exclamation marks in HaskellHaskell中的双感叹号
【发布时间】:2021-01-29 19:58:16
【问题描述】:

我有这个代码:

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

    我看到了这样的双感叹号的例子:

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

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

  1. 如何理解这个函数。需要解释。

【问题讨论】:

标签: haskell


【解决方案1】:

!! 索引列表。它需要一个列表和一个索引,并返回该索引处的项目。如果索引超出范围,则返回⊥。

【讨论】:

  • 在 ghci 中,键入 :t (!!) 以获取其类型,该类型可能与 [a] -> Int -> a 类似。由此不难推断,它是根据第二个参数提取出列表的其中一个元素。
【解决方案2】:

可能会发现在等值中更容易思考

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。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2012-07-07
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多