Haskell:递归映射的困难
我正在做递归树遍历。我想要如下内容(Haskell伪代码):Haskell:递归映射的困难,haskell,recursion,mapping,Haskell,Recursion,Mapping,我正在做递归树遍历。我想要如下内容(Haskell伪代码): 两个问题:nextStep被冻结用于映射;也无法获得最终解决方案,由提供(请参见对问题的评论)。这是一段正在运行的代码(是DFS吗?) ——|遍历源代码树,在目标位置重新创建源代码树。 TraverseReedST::设置->文件路径->整型->整型->计数器->文件路径->文件路径->IO() traverseTreeDst参数dstRoot总计totw计数器dstStep srcDir=do (目录、文件)请始终为您正在处理的所有
两个问题:
nextStep
被冻结用于映射;也无法获得最终解决方案,由提供(请参见对问题的评论)。这是一段正在运行的代码(是DFS吗?)
——|遍历源代码树,在目标位置重新创建源代码树。
TraverseReedST::设置->文件路径->整型->整型->计数器->文件路径->文件路径->IO()
traverseTreeDst参数dstRoot总计totw计数器dstStep srcDir=do
(目录、文件)请始终为您正在处理的所有数据添加类型签名、引用或定义。这是伪代码,不是吗root
是一个树节点,dsc
是其直接后代的列表,step
是另一个需要更改和传递的东西。可以为您的解决方案尝试发布伪代码,但我们仍然需要正确地知道您正在谈论的数据结构以及用途(即类型签名)你的算法的一部分是。增加后代意味着什么?或者您是增加一个步骤
?这是什么意思?我增加
只是步骤
<代码>步骤
是每次迭代都会通过增加
进行更改的内容。让我们暂时忘掉d
作为增加的第二个参数。参见UPD
walkTree step root = do
dsc <- getDescendants root
for d in dsc
nextStep = increase step d
walkTree nextStep d
walkTree step root = do
dsc <- getDescendants root
nextStep = increase step d
mapM (walkTree nextStep) dsc
-- | Walks the source tree, recreates source tree at destination.
traverseTreeDst :: Settings -> FilePath -> Int -> Int -> Counter -> FilePath -> FilePath -> IO ()
traverseTreeDst args dstRoot total totw counter dstStep srcDir = do
(dirs, files) <- listDir args srcDir
let traverse dir = do
let step = dstStep </> basename dir
mkdir (dstRoot </> step)
traverseTreeDst args dstRoot total totw counter step dir
mapM_ traverse dirs
mapM_ (copyFile args dstRoot total totw counter dstStep) files