왜 올렸나 묻지 말자.
아, 무슨 언어냐고...?
분류 보세여 :$
(* 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)
아, 무슨 언어냐고...?
분류 보세여 :$

댓글을 달아 주세요