2017-12-14 7 views
1

Ich arbeite an rekursiven Tree Walking. Ich möchte etwas wie das Folgende (Haskell Pseudocode):Haskell: rekursive Mapping-Schwierigkeit

walkTree step root = do 
    dsc <- getDescendants root 
    for d in dsc 
    nextStep = increase step d 
    walkTree nextStep d 

Keine Iteration für mich natürlich. Ich kann die Mapping-Lösung jedoch nicht herausfinden. Wie kann ich die step Sache verwalten?

UPD:

Lassen Sie uns versuchen, die Zuordnung:

walkTree step root = do 
    dsc <- getDescendants root 
    nextStep = increase step d 
    mapM (walkTree nextStep) dsc 

zwei Probleme: nextStep wird für die Abbildung eingefroren; kann auch nicht d (was sekundär ist)

+0

Bitte fügen Sie immer Typensignaturen und Referenzen oder Definitionen für alle Daten hinzu, mit denen Sie zu tun haben. – leftaroundabout

+0

Das ist Pseudocode, oder? "root" ist ein Baumknoten, "dsc" ist eine Liste seiner unmittelbaren Nachkommen, "step" ist etwas anderes, das noch geändert und weitergegeben werden kann. –

+1

Es ist in Ordnung, Pseudocode für Ihren Lösungsversuch zu posten, aber wir müssen immer noch genau wissen, über welche Datenstrukturen Sie sprechen und was die _purpose_ (d. H. Typ-Signatur) Ihres Algorithmus wäre. – leftaroundabout

Antwort

1

Endgültige Lösung, mit freundlicher Genehmigung von user2407038 (siehe Kommentare zu der Frage). Dies ist ein Code-Snippet ausgeführt wird (es ist die DFS?):

-- | 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 

Sie wahrscheinlich sehen, warum ich zu Pseudo-Code zurückgegriffen. Viele unnötige Details, aber das ist es. Das Ding kopiert Audiodateien, mischt deren Namen und setzt Tags. Nicht viel.

Ich hätte nichts dagegen, die relevante Terminologie zu diskutieren. Wie beschreiben Sie diese Art von Problem und diese Art von Lösung?

Verwandte Themen