Haskell中元组的递归定义

超人007

我正在使用图形,并创建了称为顶点的自定义类型。

type Vertex = (Int, [Vertex])

该类型是一对,Int其对是特定顶点的索引号,并且[Vertex]该顶点相邻的顶点的列表。

然后,我创建了图的邻接表。我碰到了这个问题。如何为该给定顶点类型定义相邻顶点的列表?

我们有一个带有两个顶点的图。我们称它们为12他们之间有优势。因此,顶点1与顶点2相邻,反之亦然。现在,我的邻接列表如下所示:

adjacencyList :: [Vertex]
adjacencyList = [ (1, [ (2, [ (1, [ (2, [ (1, …) ]) ]) ]) ])
                , here would go the vertex 2 ]

因此,您可以看到问题是我的顶点类型的递归定义-顶点1具有相邻的顶点2,该顶点具有相邻的顶点1,其相邻的顶点2具有相邻的顶点1,等等。在我看来,这个定义是无限的。

在像C ++这样的命令式语言中,我会使用指针来解决这个问题。但是如何在Haskell中克服这个问题呢?

这就是为什么懒惰很方便的原因。你可以做

adjacencyList :: [Vertex]
adjacencyList = [a, b]
    where a = (1, [b])
          b = (2, [a])

如果您来自c ++世界,那么这段代码可能看起来很神秘。但是,与c ++中的相互递归函数相比,这确实没有什么奇怪的。(实际上,想法几乎是相同的。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell中元组的模式匹配相等

来自分类Dev

Haskell中元组的模式匹配相等

来自分类Dev

用于列表列表中元组序列的Haskell算法

来自分类Dev

在Haskell中对元组列表进行递归

来自分类Dev

Haskell如何递归计算列表中元素的出现?

来自分类Dev

避免在Haskell中使用长元组定义

来自分类Dev

猪中元组的转换

来自分类Dev

如何在Haskell中递归返回元组数组

来自分类Dev

如何基于Haskell中的参数递归删除元组列表

来自分类Dev

难以理解元组递归在Haskell中如何工作

来自分类Dev

如何基于Haskell中的参数递归删除元组列表

来自分类Dev

如何递归遍历 Haskell 中的 3 元组列表

来自分类Dev

(共)递归定义在Haskell中如何工作?

来自分类Dev

递归条件定义,包括 Haskell 中的求和

来自分类Dev

检查元组列表,其中元组的第一个元素由定义的字符串指定

来自分类Dev

递归过程中元组列表中的元素丢失,并且警卫队没有条件接手

来自分类Dev

Swift中元组的底层类型

来自分类Dev

增加Erlang中元组的长度

来自分类Dev

Python中元组的点积

来自分类Dev

增加Erlang中元组的长度

来自分类Dev

连接列表中元组的元素

来自分类Dev

OCaml 中元组的类型注释

来自分类Dev

haskell:递归函数,返回具有特定条件的元组列表中的char(比较)

来自分类Dev

定义等效于此Haskell函数的尾部递归函数

来自分类Dev

使递归函数返回元组

来自分类Dev

Scala中元组的深度比较数组

来自分类Dev

列表中元组的总计,总和与乘积

来自分类Dev

如何忽略元组中元素的顺序

来自分类Dev

如何比较列表中元组中的值