4

まず第一に、これは宿題の質問であるため、単純なコードなどを探しているわけではなく、誰かが私のロジックを手伝ってくれるだけであることに注意してください。

割り当ては DrRacket にあります。質問は尋ねます:

与えられた FileSystem は、name と contents の 2 つのフィールドを持つ構造体として定義されています。ここで、contents はディレクトリまたはファイルのリストです。ディレクトリ内のすべてのファイルに「.bak」ファイル名を作成し、ファイルの直後に配置する関数を作成します。

私は完全に迷っています。私の論理は次のとおりです。コンテンツ リストの最初のものがファイルの場合、そのファイルと「.bak」が追加された新しいファイルでディレクトリを作り直すだけです。これは私が得ることができる限りです-サブディレクトリがある場合に物事を解決する方法、またはリストをさらに下に移動する方法がわかりません。

これが私の凶悪なコードです:

(define (backup my-fs)
   (cond
     [(empty? (dir-contents my-fs)) empty]
     [(file? (first (dir-contents my-fs))) (make-dir (dir-name my-fs) (append      (backup-list (first (dir-contents my-fs)))(rest (dir-contents my-fs))))]
     [(dir? (first (dir-contents my-fs))) (backup (first (dir-contents my-fs)))]))

誰でも私がこれを推論するのを助けることができますか?

4

2 に答える 2

2

contentsyourの部分は、FileSystemファイルまたはディレクトリを含むリストです (これは .... を含むリストです)。

これは、指摘したように、3 つのケースがある基本的なツリー トラバーサルの問題です。

  1. リストが空です
  2. リストの最初の要素はファイルです
  3. リストの最初の要素はディレクトリです

次に、ケースごとにアクションが必要です。

  1. 終わり
  2. そのファイル名を保持し、新しいファイル名を作成して、リストの残りの処理を続行します
  3. そのディレクトリを保持して再帰し、リストの残りの処理を続行します

例えば:

(define (traverse contents)
  (cond
    [(empty? contents) ... nothing to do ...]
    [(file? (first contents))              ;; if the first element's a file:
      (cons (first contents)               ;;   keep the file
       (cons (... make backup filename ... (first contents))  ;; make the backup
        (traverse (rest contents))))]      ;;   and recurse on the rest
    [(dir? (first contents)                ;; if the first element's a directory:
      (cons (traverse (first contents))    ;;   recurse on the first
            (traverse (rest contents)))])) ;;   and also recurse on the rest
于 2011-11-08T17:34:25.010 に答える
1

データ定義を明確にする必要があります。あなたが書く:

「名前と内容の 2 つのフィールドを持つ構造体として定義した FileSystem が与えられた場合、内容はディレクトリまたはファイルのリストです。ディレクトリ内のすべてのファイルに対して「.bak」ファイル名を作成する関数を記述します。ファイルの直後に配置します。」

これにより、ファイルシステムとは何かが明確になります...「ディレクトリ」と「ファイル」が何であるかを知っていれば。「ディレクトリ」と「ファイル」のデータ定義を記述して、これを明確にする必要があります。これらはそれぞれ別の文にする必要があります。「ファイルは文字列として表される」など、非常に単純な場合があります。

これを行った後、ファイルシステムの例をいくつか書きます。

于 2011-11-08T17:45:34.807 に答える