gpt4 book ai didi

list - 努力在 Haskell 中提取列表的一部分

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

我正在尝试实现一个基本功能,但我没有使用 Haskell 进行练习并且正在苦苦挣扎,因此非常感谢您的帮助。我的问题具体是如何按索引选择列表的一部分。我知道如何使用其他语言,但一直在努力

[ x | x <- graph,  x!! > 5 && x!! <10 ]

我一直在摆弄与上面类似的基本列表理解,虽然我知道这是不对的,但我希望有一个类似的简单解决方案可用。如果有人需要更多信息或想帮助解决进一步的问题,我在下面提供了更多信息,谢谢!

type Node = Int
type Branch = [Node]
type Graph= [Node]

next :: Branch -> Graph -> [Branch]

This is the individual question for the "next" function

This is the general set up information but most importantly that the graph is represented as a flattened adjacency matric

为这两张照片道歉,但这似乎是传达信息的最佳方式。

最佳答案

正如评论中指出的那样 !! 并没有以您期望的方式为您提供值的索引。它只是获取列表元素的中缀。

在 Haskell 中无法像这样获取 x 的索引,因为 x 对象不会跟踪它的位置。

为了解决这个问题,我们可以创建一个对象列表, 会跟踪它们的位置。这可以通过 zip 来实现.

zip [0..] graph

这会创建一个元组列表,每个元组都包含它们的索引和 graph 中的值。

所以你可以把你的列表理解写成

[ x | (index, x) <- zip [0..] graph, index > 5, index < 10 ]

现在这不会很快,因为它仍然需要遍历列表的每个元素,尽管我们知道第 11 个之后的元素将不会被使用。为了提高速度,我们希望使用 take 的组合和 drop .

drop 5 (take 10 graph)

然而,如果我们想做一些其他选择(例如所有偶数索引),我们仍然可以返回到列表推导。

关于list - 努力在 Haskell 中提取列表的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60723486/

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