(* Returns a line from stdin, or "^D" if EOF *) let get_line () = try read_line () (* read a line *) with End_of_file -> "\004" (* assume ^D marks EOF *) ;; (* Counts # lines from stdin *) let rec count_lines () = let line = (get_line ()) in (* get a line *) if (line.[0] = '\004') then 0 (* if EOF then 0 lines *) else 1+count_lines() (* else read more lines *) ;; print_int ( count_lines () ) ; print_endline "" ;;