2015-06-10 72 views
3

我想從列表中刪除一個項目(文件名),沒有我做過的工作,沒有從文檔中刪除功能,沒有從這個網站..這裏是我的代碼:刪除文件名,如果它已經在列表

#lang racket 

(define file-collection '()) 

(for ([f (directory-list)] #:when (regexp-match? "\\.log$" f)) 
    (set! file-collection (foldr cons (list f) file-collection))) 

(define (check-file file-in) 
    (for/list ([i (file->lines file-in)]) 
    (cond ((equal? i "[robot warrior]") (remove file-in file-collection))))) 

(for ([i file-collection])(check-file i)) 

的是,無論我怎麼努力,文件收集保持不變,所有文件都包含在集合中。不過,如果我使用displayln文件中,只有文件而不[機器人戰士]顯示,這是完美的,這就是我需要的,但我需要以某種方式存儲它。我發現它拒絕工作很奇怪/怪異。

+0

像這樣的東西不起作用? http://stackoverflow.com/questions/10468151/removing-an-item-from-a-list-in-scheme –

回答

1

以下是從列表中刪除某些文件的兩種方法。

#lang racket 

(define all-files '("file1" "file2" "file3" "file4")) 

(for/list ([file all-files] 
      #:unless (equal? file "file2")) 
    file) 

(filter (lambda (file) (not (equal? file "file2"))) 
     all-files) 

結果是:

'("file1" "file3" "file4") 
'("file1" "file3" "file4") 

注意,從現有列表二者for/listfilter而漢刪除元素產生新的列表具有相同的元件(以及省略在這種情況下「文件2」)。

+0

這裏的「文件」的目的是什麼?小丟失..這不會從文件收集列表中刪除任何東西?如果它沒有太大麻煩,你能告訴我爲什麼從文檔中取出的刪除方法不會做它應該做的事情嗎? – disaster999

+0

(for/list([file all-files])...)將遍歷列表all-files中的元素。首先'file'將引用第一個元素,然後'file'將引用第二個元素等。嘗試'(for/list([x(list 1 2 3 4)])(* 2 x))'看看'for/list'是如何工作的。 – soegaard

+0

所以'file'就是這裏的一個名字。我也可以使用'f'。 – soegaard

相關問題