Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 查找树中的所有部分路径_Haskell_Tree - Fatal编程技术网

Haskell 查找树中的所有部分路径

Haskell 查找树中的所有部分路径,haskell,tree,Haskell,Tree,我试图创建一个Haskell函数,该函数生成一个包含树的所有部分路径的列表,给定树实现数据树a=Empty |节点a(树a)(树a)。例如,如果我有一棵树 tree = Node 5 (Node 3 Empty Empty ) (Node 2 Empty Empty ) 我想去 [[],[5],[5,3],[5,2]] 我怎么能产生这样的函数?首先让我们考虑这个函数的类型,它必须是代码>树A[>[A] ] /代码> < /P> 那么,给定一个节点,我们能做什么呢?我们有一个路径,它就是节点本

我试图创建一个Haskell函数,该函数生成一个包含树的所有部分路径的列表,给定树实现
数据树a=Empty |节点a(树a)(树a)
。例如,如果我有一棵树

tree = Node 5 (Node 3 Empty Empty ) (Node 2 Empty Empty )
我想去

[[],[5],[5,3],[5,2]]

我怎么能产生这样的函数?

首先让我们考虑这个函数的类型,它必须是代码>树A[>[A] ] /代码> < /P> 那么,给定一个节点,我们能做什么呢?我们有一个路径,它就是节点本身——这就是
[x]
,以及通过这个节点到左、右子树的路径。如果我们将函数分别应用于
left
right
,则通过左、右子树的路径就是我们得到的路径。现在,我们只需要将
x
添加到每个路径的开头,然后调用
map(x:)path
即可。(对于空列表,我们应该得到一个空列表,因为没有路径。)

数据树a=空|节点a(树a)(树a)
树=节点5(节点3为空)(节点2为空)
pp::树a->[[a]]
pp(节点x左-右)=[[x]++映射(x:)(pp左)++映射(x:)(pp右)
pp Empty=[]
现在它有一个缺陷,即空路径不被此函数视为部分路径。但我们可以通过添加它并将其包装到另一个函数中来轻松地修改它:

partialPath::树a->[[a]]
部分路径t=[[]++pp t
main=打印$partialPath树

你好!请花一分钟读一下这个,如果你这样做了,你可能会删除这个答案并创建一个新的,你会得到很多帮助,事实上,我知道答案(我可以在我的脑海中数出6个用户,他们当然也知道),但这不是一个免费的代码工厂,如果你读了链接,你就会明白。我希望您能尽快创建新问题或编辑此问题。最好的祝愿。请不要提供家庭作业问题的解决方案,因为用户没有试图解决它。对不起,我没想到这可能是一个家庭作业的问题。刚开始的时候,我从其他Haskeller那里得到了很多帮助(现在仍然是这样),即使有一些看似微不足道的问题,现在我也希望能帮助其他初学者开始学习。很好的帮助绝对是个好主意。但是,这个想法是用户首先做出一个公平的尝试。通常在回答中,我们可以解释什么不适合这种尝试,并提供额外的提示来提高(效率、优雅等)。是的,我同意——但有时甚至不知道从哪里开始。但在这种情况下,我只是不考虑这个可能性。也许你可以改写你的答案给一个“提示”。例如,通过描述如何提出解决方案的过程,但将某些方面留空,以便OP可以填写:)。