因此,我需要编写一个递归解决方案,该解决方案可以遍历列表的目录和子目录并累加文件大小。我在计划方面的经验为零,而我的教授没有回复我。我尝试了几次不同的尝试,但都以错误告终。如果有人可以帮助我,将不胜感激,因为我没有太多时间来解决这项任务。
(define disk '("D" "main"
(
("F" "file1.txt" (30))
("F" "file2.txt" (11))
("D" "sub1"
(
( "F" "file1.txt" (1234))
( "F" "file2.txt" (2345))
( "F" "file3.txt" (3456))
)
)
("D" "sub2"
(
( "F" "file1.txt" (1234))
( "F" "file2.txt" (2345))
( "F" "file3.txt" (3456))
)
)
)
)
)
(define (getEnd n)
(let ((n 1)))
(let ((m 0)))
(member 3 '(disk.n))
(+ m (getEnd (+ n 1)))
)
当我运行代码时,我总是会收到此错误:
Ill-formed special form: (let (...))
我试过在函数外使用let语句,但是它仍然不起作用,因为我不知道方案如何工作。我已经联系了我的同学,他们似乎也无法弄清楚。
任何帮助,将不胜感激,谢谢!
Alet
是在正文或窗体中存在的局部绑定变量。那是:
(let ((n 1)) ; bind one variable 1
(display (+ n n)) ; use n for something
) ; end of let. `n` no longer exist.
由于您具有标签Java,C语言,因此与此相同:
{
int n = 1;
System.out.println(n + n); // use n for something
}
// end of block. n no longer exist
在您的代码中,您没有使用绑定的表达式,如果被允许,它将是无效代码,如下所示:
{
int n = 1;
}
// end of block. n no longer exist
该代码(member 3 '(disk.n))
始终是#f
因为它'(disk.n)
是一个带有一个符号的列表,disk.n
并且(equal? 3 'disk.n) ; ==> #f
最后一行(+ m (getEnd (+ n 1))
通过增加进行无条件递归n
。它不会对结构中的任何数值求和。
问题
看来您可以通过查看第一个元素是“ F”还是“ D”来检查列表是文件还是目录,因此您可以执行以下操作:
(define (file? lst)
; todo: implement
)
(file? '("F" "file1.txt" (1234))) ; ==> #t
(file? '("D" ()) ; ==> #f
您可以通过检查目录的第三个元素来获取文件列表:
(define (directory-elements dir)
; todo: implement
)
(directory-elements '("D" "D" (("F" "F1" (1234)) ("F" "F2" (2345)))))
; ==> (("F" "F1" (1234)) ("F" "F2" (2345)))
您可以创建一个获取文件大小的过程:
(define (file-size file)
; todo: implement
)
(file-size '("F" "F1" (1234)))
; ==> 1234
现在,您可以使用上面的步骤进行目标操作:
(define (size file-or-dir)
(if (file? file-or-dir)
(file-size file-or-dir)
(directory-elements-size (directory-elements file-or-dir)))
(size '("F" "F1" (1234))) ; ==> 1234
(size '("D" "D" (("F" "F1" (1234)) ("F" "F2" (2345))))) ; ==> 3579
你失踪了directory-elements-size
。可以通过递归来实现:
(define (directory-elements-size lst)
(if (null? lst)
<???> ; size of an empty directory
(+ (size <????>) ; add the size of first file/dir
(directory-elements-size <????>)))) ; with the size of the rest of the elements
妳去 您应该拥有足够的力量来继续前进。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句