嘿所以我必须浏览这个列表
(define disk
'("D"
"main"
(("F" "file1.txt"
(30)
("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 (visit-tree tree)
(if (list? tree)
(for-each visit-tree tree)
(begin
(display tree)
(newline))))
(visit-tree disk)
但是,当我尝试使用sum函数运行代码时,出现错误。
(let((sum 0))
(visit-tree(lambda (x)
(if (integer? x)
(set! sum (+ sum x))))
disk)
(display sum))
visit-tree: arity mismatch;
the expected number of arguments does not match the given number
expected: 1
given: 2
arguments...:
这是因为我的访问树函数需要2个参数,但是当我添加' fn'作为第二个arg我只是得到了另一个错误。
(define (visit-tree fn tree)
(if (list? tree)
(for-each visit-tree fn tree)
(begin
(display tree)
(newline))))
(visit-tree fn disk)
(let((sum 0))
(visit-tree(lambda (x)
(if (integer? x)
(set! sum (+ sum x))))
disk)
(display sum))
它告诉我fn尚未声明,我明白了,但我怎么能在lambda中调用?我该如何修复此代码?谢谢。
答案 0 :(得分:-1)
这就是我得到的......
(define(processElement a)
(if (eq?(car a) "F")
(file a)
(display +(file a) (directory a)
(if (eq?(car a) "D")
(display +(file a) (directory a))))))
(define (file a)
(display (car(cdr(cdr a)))))
(define (directory a)
(cdr a))
(define (processDirectoryContents a)
(if (null? a)
(display "Finish")
(processElement a)
(processDirectoryContents a)
))
(directory disk)