왜 올렸나 묻지 말자.

(* readfile.ml
 * 텍스트 파일을 통째로 읽어 내용을 출력해 주는 프로그램.
 * http://camltastic.blogspot.com/2008/09/tip-read-all-lines-from-file-most.html
 * 의 코드를 많이 참고했음.
 * ocamlc -o readfile(.exe) readfile.ml *)

(* 함수의 이름은 뭐라도 상관없다. OCaml에는 main함수 같은 개념은 없다. *)
let _ =
        (* 이것들은 관점에 따라 함수라고 봐도 좋고 변수라고 봐도 좋다.
         * 하지만 근본 개념은 함수다. *)
        let filename = "readfile.ml" in
        let channel = open_in filename in
        (* 이 놈은 함수가 아니다. 'ref' 지시어는 변할 수 있는(mutable) 객체를 만든다.
         * [] - 빈 리스트 같은 OCaml 기본 문법은 
         * http://merd.sourceforge.net/pixel/language-study/syntax-across-languages-per-language/OCaml.html
         * 를 읽어볼 것. *)
        let lines = ref [] in
        try
                (* input_line 함수는 파일의 끝을 만나면 End_of_file 예외를
                 * 발생시킨다. *)
                while true; do
                        (* OCaml의 리스트는 앞에서 붙이기(C++ 식으로 말하자면
                         * push_front())밖에 안 된다. 물론, 기본으로 제공되는
                         * 것이 그렇다는 얘기. 원한다면 스스로 push_back을
                         * 구현해도 문제될 것 없다. *)
                        lines := (input_line channel) :: !lines
                done;
        (* 예외처리. OCaml의 예외는 C++보다는 조금 그 심각함(?)이 덜하다. *)
        with End_of_file ->
                (* 파일 닫기 *)
                close_in channel;
                (* 리스트의 크기 - 이 경우에는 텍스트파일의 줄 수를 출력함. *)
                Printf.printf "length of lines = %d\n" (List.length !lines);
                (* 아까 리스트를 역순으로 붙여나갔기 때문에, 원래 순서대로
                 * 작업하려면 List.rev 함수를 이용해서 뒤집어줘야 한다 *)
                List.iter (Printf.printf "%s\n") (List.rev !lines)


아, 무슨 언어냐고...?

분류 보세여 :$

크리에이티브 커먼즈 라이센스
Creative Commons License
2010/02/13 01:57 2010/02/13 01:57
Posted by 호빵

트랙백 주소
http://hoppang.net/tc/trackback/61

댓글을 달아 주세요

[로그인][오픈아이디란?]