gpt4 book ai didi

haskell - 一份数据两种结构: Functional Programming vs Imperative Programming

转载 作者:行者123 更新时间:2023-12-02 12:19:15 26 4
gpt4 key购买 nike

假设在 C 中,我们有以下结构:

struct MyData {
char key1[20];
long key2;
... /* some data */
};

本质上,除了一些数据之外,我们还有两个键:key1 和 key2。假设我们需要以两种不同的方式管理一堆MyData对象,例如根据key1或key2(但不能同时)快速找到相应的对象。满足这一要求的一种方法是根据两个键分别构建两个不同的RB树(或哈希表)。在C/C++中,数据不需要重复,只需要记录对象的指针即可。

在上面的假设示例中,关键点是我们有一堆相同类型的数据,我们可以通过两种不同的数据结构来组织它们,而无需使用命令式语言重复数据。我想知道纯函数式编程如何在不重复数据的情况下有效地满足这个要求。为了使其更通用或更具挑战性,这两个数据结构可能不是同一类型。例如,一个可以是 rb-tree,另一个可以是哈希表。

如果可能,请在 Haskell 中布局您的解决方案。

PS:作为函数式编程的新手,我不禁想知道如何在纯函数式编程中实现命令式编程的一些技巧。我知道有时候这根本没有意义。如果有人觉得这个问题也毫无意义,请布局详细的推理。

谢谢

最佳答案

这在函数式编程中通常也不是问题。

data MyData = MyData
{ key1 :: ByteString
, key2 :: Int
, {- some data -} }

现在我们可以使用 key1 作为键构建一个 HashMap ByteString MyData,或者使用 key2 构建一个 Vector MyData code> 作为索引,或者其他什么。只有指向键的指针才会被复制,记录甚至键本身都不会被复制。

关于haskell - 一份数据两种结构: Functional Programming vs Imperative Programming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836715/

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