【发布时间】:2020-11-16 18:47:24
【问题描述】:
我正在尝试使用 Haskell,并且我找到了一些要求创建图形数据结构的研讨会。我跟着并使用感觉更简单的地图创建了一个二叉树。我给出了以下数据类型
type Graph a = [(Node a, Edges)]
type Edges = [NodeID]
type NodeID = Int
data Node a = Node
{ getNodeID :: NodeID,
getNodeVal :: a
}
deriving (Show, Eq)
示例节点如下
nodeA = Node 0 'A'
双向连接的示例图将是
graphA = [(nodeA, [1]), nodeB, [0]]
现在,为了进行任何类型的插入或删除操作,我首先必须找出此时的最大 NodeID 是多少。所以我想写一个maxNodeID如下
maxNodeID :: Graph a -> Maybe NodeID
maxNodeID [] = Nothing --base case
但是我很难为这个函数想出下一个案例。
我对 insertNode 函数的类型定义如下
insertNode :: a -> Graph a -> Graph a
-- This is my idea for a base case but I get a parse error at 0
insertNode v [] = [a, []] where a = Node {0, v}
对此和创建 insertNode 函数的任何帮助将不胜感激,因为它确实可以帮助我走上正确的道路。
【问题讨论】: