let _ =
    let rec write i =
        print_int i;
        print_newline ();
        read ()
    and read () =
        match read_int () with
        | 42    -> ()
        | i     -> write i
    in read ()
;;
  • created

    Feb '05
  • last reply

    Dec '06
  • 1

    reply

  • 1.1k

    views

  • 2

    users

1 year later

an imperative version is

while true do
  let n = read_int () in
  if n=42 then exit 0 else print_int n; print_newline ()
done

If 42 weren't guaranteed to be in the input, then it would be

try
  while true do
    let n = read_int () in
    if n=42 then exit 0 else print_int n; print_newline ()
  done
with End_of_file -> exit 0