2014-05-17 3 views
1

나는 처음부터 OCaml 책을 따라 간다. John Whitington. 91-92 쪽에서 그는 OCaml에서 값을 인쇄하고 읽는 방법에 대해 논의했습니다. 그는 코드가OCaml에서 파일을 인쇄하고 읽는 법

let rec read_dict()= 
    let i=read_int() in 
    if i=0 then 
    [] 
    else 
    let name=read_line in 
    (i, name):: read_dict();; 

read_dict();; 

과 같이 입력 된 정수 값과 문자열 값을 받아서 쌍으로 목록을 반환하도록해야한다고 주장합니다. 그러나 내 컴퓨터에서 코드를 실행할 수 없으며 시도해보십시오. Ocaml 웹 사이트에서 성공적으로 실행할 수 없습니다. 뭐가 잘못 됐는지 물어봐도 될까요?

나는 우분투에 utop에서 Windows IDE에서 OCaml의의 최상위에서 시도하고 에 웹 사이트에 OCaml의을보십시오. 첫 번째 경우에는 프로그램이 계속 실행되고 아무 것도 표시되지 않습니다. 두 번째로는 가치가 있지만 결코 끝나지 않습니다. 세 번째 인스턴스에서는 값을 취하지 만 One과 같은 문자열 값을 지정하면 오류 메시지가 표시됩니다.

+0

값을 가져 왔지만 끝나지 않는다고 말하면 정수로 '0'을 사용하려고 했습니까? 입력을 끝내야하는 것처럼 보입니다. –

+0

Utop에서 다시 구현하려고합니다. 그러나 Try Ocaml 웹 사이트에서는 0으로 끝나지만 문자열 값을 사용할 수는 없습니다. –

답변

3

let name=read_line inlet name = read_line() in으로 바꾸고 명령 줄에서 작동해야합니다 (맨 위는 아니지만 stdin으로 엉망이됩니다).

입력의이 단계별로 해보자

1 
one 
2 
two 
0 
+0

나는 당신의 코드를 시도했지만 아무 것도 입력하지 않는다. 기능은 끝났습니다. 아마 유토피아로 다시 시도해야 할 것입니다. –

+0

직접 묻지는 않겠지 만 독서를 시작하십시오. 요청을 더 좋게 만들려면 명세서를 인쇄해야합니다. – nlucaroni

3

처럼 보일 것이다. 먼저 input_dict.ml이라는 파일을 만들고 좋아하는 텍스트 편집기에서 엽니 다. 난 당신이 제대로 작동하는지, 확신 할 수 단지, 마지막에 약간의 인쇄를 추가 한

open Printf 

let rec read_dict() = 
    let i = read_int() in 
    if i = 0 then [] else 
    let name = read_line() in 
    (i, name) :: read_dict() 

(* The entry point. Read a dictionary and print it out. *) 
let _main : unit = 
    let dict = read_dict() in 
    printf "dict = { "; 
    List.iter (fun (i,n) -> printf "%d => %s; " i n) dict; 
    printf " }\n" 

:

는 그 다음에 다음 코드를 넣습니다.

이제 파일을 저장하고 셸로 이동하여 파일이있는 디렉터리에 있는지 확인한 다음 ocamlbuild input_dict.byte -- 명령을 사용하여 프로그램을 컴파일하고 실행하십시오. 이 두 후행 대시는 ocamlbuild에게 컴파일 후 프로그램을 실행하도록 지시합니다. 마지막에 다음과 같이 보일 것입니다 : 귀하의 의견은 OCaml의 인터프리터 "먹는"되기 때문에

$ ocamlbuild input_dict.byte -- 
42 
Hello 
56 
World 
0 
dict = { 42 => Hello; 56 => World; } 

, 당신은 대화 형 모드에서이 프로그램을 실행하지 않도록주의하시기 바랍니다.

+0

고마워요! 내가 그것을 시도하자. –

+0

안녕하세요. 실행했지만 아무 것도 나타나지 않았습니다. "changwei @ Sparkie-Virtual-Machine : ~ $ ocamlbuild input_dict.byte - 00:00:00에 완료, 3 타겟 (3 캐시) " –

+0

잘못 이해했습니다. 이제 작동 중입니다! 고맙습니다! –