我准备参加关于非过程语言的考试。我有一份测试任务的例子,但我不知道该如何解决它。
任务如下:
给定两个树结构:
data Tree a = Nil1 | Node1 a [Tree a]
data NumTree a = Nil2 | Node2 (a,Int) [NumTree a]
编写函数
numberTree :: Num a => Tree a -> NumTree a
该函数将以先序遍历方式返回带编号的NumTree a
。
我尝试了这个,但不知道如何继续下去。
numberTree tree = numberTree' tree 1
numberTree' :: Num a => Tree a -> Int -> NumTree a
numberTree' Nil1 _ = Nil2
numberTree' (Node1 num list) x = (Node2 (num,x) (myMap x numberTree list))
我不知道如何编写类似于myMap
的代码,因为它应该返回树和累计先序号,但我不知道如何实现。
欢迎提出任何建议。
Num a
约束。 - melpomenenumberTree' :: Tree a -> Int -> (NumTree a, Int)
。 - melpomenenumberTree' :: Tree a -> Int -> NumTree a
吗? - VojacejonumberTree
函数不应该关心树的元素,它只需要将数字相加即可。 - melpomene