Недавно я начал изучать OCaml. Я нашел странную вещь как результат выполнения программы. Пример - часть консольной игры TicTacToe. Этот код:Странный порядок выполнения кода в OCaml
let move pl arr =
let() = Printf.printf "Player %i, enter two numbers: \n" pl in
let x1 = Scanf.scanf "%i\n" (fun n -> n) in
let y1 = Scanf.scanf "%i\n" (fun n -> n) in
if (pl=1) then Array.set arr.(x1) y1 "X"
else Array.set arr.(x1) y1 "O"
;;
Дайте такой странный результат:
[email protected]:/home/kirill/workspace/Test2# corebuild hw.native
Finished, 4 targets (0 cached) in 00:00:00.
[email protected]:/home/kirill/workspace/Test2# ./hw.native
1
1
Player 1, enter two numbers:
[email protected]:/home/kirill/workspace/Test2#
Почему этот код:
let x1 = Scanf.scanf "%i\n" (fun n -> n) in
let y1 = Scanf.scanf "%i\n" (fun n -> n) in
запустить перед этим кодом:
let() = Printf.printf "Player %i, enter two numbers: \n" pl in
???
Извините за плохой английский. Спасибо за ответ!
Это не код, который выполняется из строя, только принтер, который не сделал промойте его. Попробуйте добавить '%!' В конце строки (или вызывать 'flush stdout'), она должна выводиться как ожидалось. Возможный дубликат http://stackoverflow.com/questions/31216473 – anol
Возможный дубликат [вызовов функции OCaml происходит в неправильном порядке] (http://stackoverflow.com/questions/31216473/ocaml-function-calls-happening-in- неправильный порядок) – anol