gpt4 book ai didi

haskell - 在 Haskell 中使用 Data.Map 的示例

转载 作者:行者123 更新时间:2023-12-04 02:36:52 24 4
gpt4 key购买 nike

我是 Haskell 的新手,我需要定义一个空的 Data.map 并通过使用插入函数并更新值来为其键分配一个“整数列表”(例如 [1,2,3])。然后查找键值。

到目前为止我尝试过的是:

import qualified Data.Map

foo num =
let
my_map = Data.Map.empty

new_map = bar my_map num 1

in
Data.Map.lookup 1 new_map


bar my_map num c =
if c > num then my_map
else
Data.Map.insert c [c] my_map
bar my_map num c+1

此代码不起作用。

你能举个简单的例子吗?

最佳答案

人们通常导入 Data.Map带有此样板的模块:

import Data.Map (Map)
import qualified Data.Map as Map

这个想法是因为模块中的许多名称与 Prelude 冲突。和其他模块,您希望将它们用作限定名称—但不适用于 Map键入自己。和 as Map第二行中的位使您不必输入太多-您只需说 Map.map , Map.empty , ETC。

现在,构建 map 的最简单和最常用的方法是使用 fromList模块中的功能。这构造了一个 Map来自键/值对列表: Map.fromList :: Ord k => [(k, v)] -> Map k v .要构建这个键/值对列表,您可以使用 Haskell 列表处理函数的全部功能,如下例所示:
myMap :: Integer -> Map Integer [Integer]
myMap n = Map.fromList (map makePair [1..n])
where makePair x = (x, [x])

GHCI 中的示例输出:
>>> myMap 3
fromList [(1,[1]),(2,[2]),(3,[3])]

请注意 Map type 甚至将自身打印为 fromList调用将重建它。为什么?因为同样,这个函数确实是构建 Map 的最常用方法。 .

相反,您在代码中所做的是尝试编写一个命令式循环,该循环连续地一次增加一个初始空映射,其中包含一个条目。 Haskell 等价的循环是列表函数。在我的版本中,我使用了以下内容:
  • [1..n] — 从 1 生成整数列表高达 n .
  • map ——对列表的每个元素应用一个函数。
  • Map.fromList ——建立一个Map从键/值对列表中。

  • 为了进一步证明这一点,如果您查看 the source code for Map.fromList ,它实际上是使用列表折叠函数定义的。

    我给你的建议:学习 list 和 Data.List 在处理 Map 之前先模块.尤其是:
  • 了解那里有哪些可用的功能以及要做什么。
  • 研究 foldr该模块的函数——如何使用它,以及如何编写它。
  • 了解如何编写您自己的 map 版本, filterfind根据 foldr .
  • 关于haskell - 在 Haskell 中使用 Data.Map 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20576229/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com