Filesystems 字符串附加到具有Scheme的目录中的文件
请注意,首先,这是一个家庭作业问题,所以我不是在寻找直接的代码或类似的东西,只是希望有人可以帮助我的逻辑 作业正在进行中。问题是: 给定一个文件系统,我们将其定义为具有两个字段(名称和内容)的结构,其中内容是目录或文件的列表;编写一个函数,为目录中的每个文件创建一个“.bak”文件名,并将其放在文件后面 我完全迷路了。我的逻辑如下:如果内容列表中的第一件事是一个文件,只需使用该文件和附加了“.bak”的新文件重新生成目录。这是我所能做到的——如果有子目录,我看不出如何解决问题,也看不到如何进一步向下移动列表 这是我的残暴代码:Filesystems 字符串附加到具有Scheme的目录中的文件,filesystems,scheme,tree-traversal,Filesystems,Scheme,Tree Traversal,请注意,首先,这是一个家庭作业问题,所以我不是在寻找直接的代码或类似的东西,只是希望有人可以帮助我的逻辑 作业正在进行中。问题是: 给定一个文件系统,我们将其定义为具有两个字段(名称和内容)的结构,其中内容是目录或文件的列表;编写一个函数,为目录中的每个文件创建一个“.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)))]))
有人能帮我解释一下吗?您的
文件系统的内容部分是一个包含文件或目录的列表(这些列表包含……)
这是一个基本的树遍历问题,您有三种情况,如您所述:
列表为空
列表中的第一个元素是文件
列表中的第一个元素是目录
然后,您需要针对每种情况采取行动:
完成
保留该文件名,创建新文件名,然后继续处理列表的其余部分
保留该目录,在其上递归,并继续处理列表的其余部分
例如:
(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
您需要澄清您的数据定义。你写道:
“给定一个文件系统,我们将其定义为一个包含两个字段的结构,名称和内容,其中内容是目录或文件的列表;编写一个函数,为目录中的每个文件创建一个“.bak”文件名,并将其立即放在文件后面。”
这清楚地说明了什么是文件系统。。。如果你知道什么是“目录”和“文件”。您需要通过编写“目录”和“文件”的数据定义来澄清这一点。每一个都应该是一个单独的句子。它们可能非常简单,例如“文件表示为字符串”
完成此操作后,请编写一些文件系统示例。谢谢您的编辑!我必须学会如何正确地自己做!我认为我们应该根据说明中的规则从一个有效文件系统的示例开始。你能提供一个显示一些文件和子目录吗?我在回车时遇到了麻烦。。。按Enter键是否会自动发布编辑/评论?@MarkSoric--按shift Enter键可以换行。原则上,我知道我想做什么。这是用新文件重新创建一个完整目录的语法让我失望。@MarkSoric——这就是代码的作用。查看(文件?…)
和(目录?…)
的操作——递归自然会重新创建整个目录。奇怪。。。当我第一次尝试这个问题的时候,我有一个非常类似的代码,但它不起作用-我显然有一个小小的改变,使我所拥有的变得无用!我想我的问题是:我可以做你在列表上做的事情,当我必须创建相同的目录结构时,我失败了。@MarkSoric--自然递归负责保存目录的结构--参见dir?
?它不仅在列表的其余部分递归,而且在列表的第一个元素上递归。然后将结果放回完全相同的位置。如果你需要一个资源来理解递归,我建议你——一个小小的Schemer。文件系统实际上只是一个目录。它具有相同的结构,我使用相同的构造函数来创建它。我想给出一个FS和一个文件的例子,但我不能在不发布我的评论的情况下按Enter键!好的,听起来你有一些例子。接下来,您需要一些测试用例。这里有一种“分娩”的时刻,你无法理解为什么测试用例是必要的,然后突然你意识到测试用例包含了解决方案。