Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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_Recursion_Mapping - Fatal编程技术网

Haskell:递归映射的困难

Haskell:递归映射的困难,haskell,recursion,mapping,Haskell,Recursion,Mapping,我正在做递归树遍历。我想要如下内容(Haskell伪代码): 两个问题:nextStep被冻结用于映射;也无法获得最终解决方案,由提供(请参见对问题的评论)。这是一段正在运行的代码(是DFS吗?) ——|遍历源代码树,在目标位置重新创建源代码树。 TraverseReedST::设置->文件路径->整型->整型->计数器->文件路径->文件路径->IO() traverseTreeDst参数dstRoot总计totw计数器dstStep srcDir=do (目录、文件)请始终为您正在处理的所有

我正在做递归树遍历。我想要如下内容(Haskell伪代码):


两个问题:
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