Jump to content

Walk a directory/Recursively: Difference between revisions

→‎{{header|OCaml}}: a little bit simpler
(Added Oz example.)
(→‎{{header|OCaml}}: a little bit simpler)
Line 444:
let walk_directory_tree dir pattern =
let select str = Str.string_match (Str.regexp pattern) str 0 in
let rec walk diracc = function
| [] -> (acc)
let contents = Array.to_list (Sys.readdir dir) in
| dir::tail ->
let contents = List.rev_map (Filename.concat dir) contents in
let contents = Array.to_list (Sys.readdir dir) in
let dirs, files =
let contents = List.fold_leftrev_map (funFilename.concat (dirs,filesdir) fcontents ->in
let dirs, files =
match (stat f).st_kind with
List.fold_left | S_REG ->(fun (dirs, f::files) f (* Regular file *)->
| S_DIR ->match (stat f::dirs, files).st_kind (* Directory *)with
| _S_REG -> (dirs, f::files) (* Regular file *)
) | S_DIR -> ([]f::dirs,[] files) contents (* Directory *)
| _ -> (dirs, files)
in
) ([],[]) contents
let matched = List.filter (select) files in
in
(* recursively walk into sub-directories: *)
let resultsmatched = List.filter (select) files in
List.fold_leftwalk (funmatched @ acc) (dirs dir@ ->tail)
let sub_result = walk dir in
List.rev_append sub_result acc
) matched dirs
in
(results)
in
walk [] [dir]
;;
 
Cookies help us deliver our services. By using our services, you agree to our use of cookies.