Я делаю упражнение бесплатного курса. Следующий код ocaml компилируется, когда я «делаю», но он жалуется, когда я пытаюсь перевести его на верхний уровень. Почему?
let main () =
(* Parsing arguments *)
let f_name = ref "" in
Arg.parse [ ] (fun s -> f_name := s) "Mini-Java analyzer";
(* Parsing of the source file *)
let simple_java_prog =
if String.compare !f_name "" = 0 then failwith "no program file given";
Localizing.current_file_name := !f_name;
let f_desc = open_in !f_name in
let lexbuf = Lexing.from_channel f_desc in
let java_prog =
try Java_parser.program Java_lexer.token lexbuf
with
| e ->
Printf.printf "Exception during parsing: %s\n"
(Printexc.to_string e);
failwith "Stopped" in
Simple_java_translate.tr_java_prog java_prog in
Printf.printf "finished...\n"
let _ = main ()
Но когда я "c-c c-e" (из emacs) перебираю этот код, он выдает мне ошибку
....
let main () =
Error: Reference to undefined global `Localizing'
затем, с этой информацией об ошибке, я получил объяснение от
http://caml.inria.fr/pub/docs/manual-ocaml/manual023.html
, который говорит,
Ссылка на неопределенный глобальный мод
Вы забыли загрузить в память реализацию модуля
с # load.
Итак, я пытаюсь сделать: #load "localizing.cmo". Но теперь проблема в том, что localization.cmo не существует
Вот результат поиска.
bash-3.2$ ls localizing*
localizing.cmi localizing.cmx localizing.ml localizing.mli localizing.o
Мне не терпится разместить здесь makefile, источник проблемы не должен исходить из "Makefile", к тому же он такой большой. Кроме того, я не должен изменять make-файл, потому что он предоставлен сайтом курса.
В чем проблема ?? Спасибо. Правильно ли я пришел к выводу, что не все программы ocaml должны выполняться на высоком уровне?