Walk a directory/Recursively: Difference between revisions

Content added Content deleted
Line 213: Line 213:
#load "str.cma"
#load "str.cma"
open Unix
open Unix

let push li vl = li := List.rev_append vl !li


let walk_directory_tree dir pattern =
let walk_directory_tree dir pattern =
let select str = Str.string_match (Str.regexp pattern) str 0 in
let select str = Str.string_match (Str.regexp pattern) str 0 in
let acc = ref [] in
let rec walk dir =
let rec walk dir =
let contents = Array.to_list (Sys.readdir dir) in
let contents = Array.to_list (Sys.readdir dir) in
Line 231: Line 228:
in
in
let matched = List.filter (select) files in
let matched = List.filter (select) files in
push acc matched;
(* recursively walk into sub-directories: *)
(* recursively walk into sub-directories: *)
List.iter walk dirs
let results =
List.fold_left (fun acc dir ->
let sub_result = walk dir in
List.rev_append sub_result acc
) matched dirs
in
(results)
in
in
walk dir;
walk dir
(!acc)
;;
;;


Line 243: Line 244:
List.iter print_endline results;
List.iter print_endline results;
;;</ocaml>
;;</ocaml>



=={{header|Perl}}==
=={{header|Perl}}==