0
(define-struct directory (name contents))
;A directory is a (make-directory String (list-of files)
;A file is one of:
; a * String (containing the name of the file; non-empty and does not contain
"/"
;* a Directory
我在做什麼是一個函數,它將一個目錄和一個文件名用作字符串。然後該函數應該生成文件路徑,每個文件或目錄以「/」分隔。計劃/球拍中的文件路徑/
一個示例目錄:
(define a1 (make-directory "a1" (list "a1.pdf" "a1q1.rkt" "a1q2.rkt" "a1q3.rkt")))
(define a2 (make-directory "a2" (list "a2.pdf")))
(define assns (make-directory "assns" (list a1 a2)))
(define labs (make-directory "labs" (list "lab01.pdf" "lab02.pdf")))
(define final (make-directory "final" empty))
(define cs115 (make-directory "cs115" (list assns labs final "style.pdf" "survivial.pdf")))
例如
(path cs115 "a2.pdf")
應該產生
"cs115/assns/a2/a2.pdf"
我有什麼至今:
(define (find dir name)
(cond
[(string=? (directory-name dir) name) name]
[(member? name (directory-contents dir))
(string-append (directory-name dir) "/" name)]
[(cons? (directory-contents dir))
(content-list (directory-name dir)(directory-contents dir) name)]
))
(define (content-list dir-name dir-list name)
(cond
[(empty? dir-list)
(content-list dir-name (rest dir-list) name)]
[(equal? (first dir-list) name)
(string-append dir-name "/" (first dir-list))]
[(directory? (first dir-list))
(find (first dir-list) name)]
[else (content-list dir-name (rest dir-list) name)]
))
個
問候, 山姆
雖然我不知道我理解你的問題,你想_sounds_功能類似球拍的[構建路徑(http://docs.racket-lang.org/reference/Manipulating_Paths.html#%28def ._%28%28quote._〜23〜25kernel%29._build路徑%29%29)?同時請記住'apply'和'list *'。 –
我的問題是如何創建一個文件路徑從我看到的問題 – Sam
上面創建的目錄,所以該函數應該找到所需的名稱的文件,在目錄樹的任何深度,並返回完整路徑/它們。如果有多個這樣的文件,它是否只需要返回它發現的第一個,或者它們全部?另外:到目前爲止您嘗試了哪些代碼,以及您卡在哪裏? –