Функция печати ocaml после компиляции - PullRequest
0 голосов
/ 13 марта 2019

Это мой первый день с ocaml. Наслаждаясь этим до сих пор. Я хотел выяснить, есть ли способ напечатать результат функции. Вот пример, основанный на Project Euler # 5 .

Мой код:

let rec gcd a b =
  if b==0 then a
  else (gcd b (a mod b));;

let rec myans n anssofar=
  if n==1 then anssofar
  else (myans (n-1) ((anssofar*(n-1))/(gcd anssofar (n-1))));;

Printf.printf "%d\n" (myans 20 20)

Это отлично работает. Затем я скомпилирую его, используя:

$ ocamlc -o PE0005 PE0005.ml

А затем запустите его, используя

$ ./PE0005

И он выплевывает ответ.

Теперь предположим, что я хотел потренироваться в 10.10. Кажется извращенным делать то, что я делал, это возвращаться назад, редактировать последнюю строку в

Printf.printf "%d\n" (myans 10 10)

, а затем перекомпилируйте и запустите снова. Функция уже была определена и скомпилирована. Можно ли как-то распечатать ответ без перекомпиляции?

Любые советы и подсказки приветствуются.

Ответы [ 2 ]

4 голосов
/ 13 марта 2019

Одна из возможностей - запустить ваш код на верхнем уровне (цикл чтения / проверки / печати OCaml).Это позволяет вам легче экспериментировать.

$ ocaml
# #use "PE0005.ml";;
val gcd : int -> int -> int = <fun>
val myans : int -> int = <fun>
232792560
- : unit = ()
# myans 10 10;;
- : int = 2520

Другая возможность - переписать ваш код, чтобы получить аргумент из командной строки.Это то, что вы будете делать на практике для скомпилированной программы командной строки.

let main () =
    if Array.length Sys.argv < 3 then (
        Printf.eprintf "need two integer arguments\n";
        exit 1
    ) else (
        Printf.printf "%d\n"
            (myans (int_of_string Sys.argv.(1)))
    )

let () = main ()

Вот как это работает при запуске:

$ ocamlc -o PE0005 PE0005.ml
$ ./PE0005 20 20
232792560
$ ./PE0005 10 10
2520
1 голос
/ 14 марта 2019

Вы можете использовать sys.argv, чтобы получить аргументы командной строки и передать значения во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...