string-append到具有Scheme的目录中的文件

时间:2011-11-08 17:16:58

标签: filesystems scheme tree-traversal

首先请注意这是一个家庭作业问题,所以我不是在寻找直接的代码或类似的东西,只是为了帮助我的逻辑。

作业在DrRacket中。问题是:

  

给定一个FileSystem,我们将其定义为具有两个字段的名称和内容的结构,其中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)))]))

任何人都可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:2)

contents的{​​{1}}部分是包含文件或目录的列表(包含....的列表)。

这是一个基本的树遍历问题,你有三种情况,如你所说:

  1. 列表为空
  2. 列表中的第一个元素是文件
  3. 列表中的第一个元素是目录
  4. 然后你需要为每个案件采取行动:

    1. 完成
    2. 保留该文件名,创建新文件名,然后继续处理列表的其余部分
    3. 保留该目录,对其进行递归,然后继续处理列表的其余部分
    4. 例如:

      FileSystem

答案 1 :(得分:1)

您需要澄清数据定义。你写道:

“给定一个FileSystem,我们将其定义为具有两个字段,名称和内容的结构,其中contents是目录或文件的列表;编写一个函数,为每个文件创建一个”.bak“文件名在目录中并将其放在文件后面。“

这清楚地说明了文件系统是什么......如果你知道“目录”和“文件”是什么。您需要通过编写“directory”和“file”的数据定义来澄清这一点。每一个都应该是一个单独的句子。它们可能非常简单,例如“文件表示为字符串”。

执行此操作后,请编写一些FileSystems示例。