Haskell - Searching list of Tuples, returning second elements
所以我知道有人问过这个问题的许多变体,但我已经阅读了几个小时的帖子,我只是卡住了。我在 haskell 方面越来越好,但没有完全理解所有内容。
对于初学者来说,这是一个作业,所以虽然我不希望答案寻找一些指导。
我们为这个赋值声明了这 4 种类型:
我目前正在工作的是一个函数,它接受一个节点和一个图表,并返回一个连接到传入节点的节点列表。
一旦我找到了我正在寻找的源节点,我真的很想知道如何递归地返回元组中的第二个元素。我知道我需要使用 fst 来获取每个元组的第一个元素进行比较,但是我在这里迷路了,我被困在如何正确返回第二个元素(将其添加到我的列表中)然后继续剩余的元组列表。
1 2 | Neighbors :: Node -> Graph -> [Node] Neighbors nd gr = |
我一直在阅读有关过滤器的信息,但我不确定在这种情况下是否有效,因为如果我理解正确,它会返回对。求指导,谢谢
您确实可以使用过滤器来查找从给定节点离开的边。然后,您需要获取每个边缘的第二个元素。你需要地图。所以你写:
(请注意,Haskell 不允许您以大写字母开头的函数名称)。
如果你想变得很酷,你可以用几乎没有点的方式来写它:
如果你想让它更容易阅读,你可以使用列表推导:
1 | neighbors nd gr = [ y | (x,y) <- gr, x==nd ] |
filter 确实可以用于仅返回图中您感兴趣的那些边(即从目标节点引出的那些边)。然后你会有一个边列表,而你真正想要的是一个节点列表。在过滤到只需要的边之后,你能想出一个函数可以将边列表转换为节点列表吗?
1 2 3 4 5 |
如果您能想到适当的