2014-11-07 3 views
0

저는 오랫동안 OCaml을 배우고 싶었습니다. 최근에 마침내 그것을하기로 결정했지만, OCaml에 대한 나의 첫 번째 노출은 길조가 아니 었습니다. ...하나의 함수를 내보내는 모듈을 정의하는 방법은 무엇입니까?

나는 그것을 배우십시오 (다른 언어로 저에게 잘 어울린 접근법). 각 연습은 테스트 스크립트와 함께 제공됩니다. 나는이 작업을 얻기 위해 실패 그대로 전체 아침 을 보냈습니다

(* test.ml *) 

open Core.Std 
open OUnit2 
open Mymod 

let ae exp got _test_ctxt = assert_equal ~printer:String.to_string exp got 

let tests = ["hello" >:: ae "hello!" (echo "hello!");] 

let() = 
    run_test_tt_main ("tests" >::: tests) 

: 매우 첫 번째 테스트 스크립트는 이것이다.

https://realworldocaml.org/v1/en/html/files-modules-and-programs.html

http://caml.inria.fr/pub/distrib/ocaml-4.01/ocaml-4.01-refman.html

https://ocaml.org/learn/tutorials/modules.html

... 그리고 여러 가지 다른 장소를, 그리고 아무것도 찾을 수 없습니다 :

나는 모든 장소에서 그것을 할 방법을 찾기 위해 노력했다이 문제와 관련이있는 것처럼 보이거나 작동합니다.

거기에 OCaml 문서의 페이지와 페이지가 있지만, Mymod 모듈을 작성하는 방법을 알려줄만한 것을 찾을 수 없습니다.

나는 내 mymod.mli 파일에서 다음 중 하나를 넣어 시도 : 수십 다른 변종과 함께 ...

let echo x = x ;; 
let echo : string -> string = fun x -> x ;; 
let echo x : string = x ;; 

을; 그들은 테스트를 통과하지 못하고 컴파일도하지 못합니다. 컴파일러 오류 메시지는 뚫을 수 없으며 (예 : illegal begin of interf) 해석 할 문서가 없습니다.

문서에서 (문자열) 입력을 반환하는 함수를 정의하는 구문을 찾을 수 없습니다.

몇 가지 도움을 주시면 감사하겠습니다.

답변

3

@camlspotter가 지적한 내용에 자세히 설명하려면이 같은 mymod.mli 파일 특성을가집니다 :

$ ocamlopt -c mymod.mli 
$ ocamlopt -c mymod.ml 
$ echo 'Printf.printf "saw %s\n" (Mymod.echo "hello world")' > main.ml 
$ ocamlopt -o main mymod.cmx main.ml 
$ ./main 
saw hello world 

이것은에 설명되어 있습니다..

2

이 아니라 mymod.ml에 코드를 작성하십시오. *.ml은 코드 용이며 *.mli은 인터페이스 용입니다.

let echo s = s 

당신은 컴파일하고 다음과 같이 실행할 수 있습니다 :이 같은

val echo : string -> string 

mymod.ml 파일 :

관련 문제