(* This is a non-empty Caml quine *) (* Alain Frisch; 1999/11/24 *) let data = "(* here begins the ~code~ *) (* first, copy the data *) print_string (~(* This is a non-empty Caml quine *) (* Alain Frisch; 1999/11/24 *) let data = \~~^data^~\~ in ~); (* again, but interpret quotes *) for i=0 to pred (String.length data) do match data.[i] with | (*!*) '~' when data.[i-5]<>'!' -> print_char '~' | c -> print_char c done " in (* here begins the "code" *) (* first, copy the data *) print_string ("(* This is a non-empty Caml quine *) (* Alain Frisch; 1999/11/24 *) let data = \""^data^"\" in "); (* again, but interpret quotes *) for i=0 to pred (String.length data) do match data.[i] with | (*!*) '~' when data.[i-5]<>'!' -> print_char '"' | c -> print_char c done