Я новичок в OCAML и играю с тем, чтобы поставить маркер на случайный квадрат 5X5.Я написал пример программы ниже."silly_method1" работает, но обратите внимание, что он принимает аргумент.У меня действительно нет аргументов, чтобы передать то, что я хочу.Я просто прошу случайное число, чтобы создать моего робота на определенном квадрате:
let create = {x = ( Random.int 4); y=3; face = North}
Однако, я каждый раз получаю одно и то же местоположение.Это имеет смысл для меня ... вроде.Я предполагаю, что способ, которым я его настроил, «создать», по сути, является константой.Это оценивается один раз и все!Я исправил это ниже в silly_method2, но посмотрите, как это уродливо!
let silly_method2 _ = (Random.int 10)
Каждый раз, когда мне нужно вызвать его, я должен передать аргумент, даже если я его на самом деле не использую.
Как правильно это сделать?Должен быть какой-то способ иметь функцию, которая не принимает аргументов и передает назад случайное число (или случайный кортеж и т. Д.) И, возможно, связано ... Есть ли способ сказать OCaml, чтобы он не оценивал функцию один раз и сохранял результата точнее пересчитывать ответ каждый раз?
Спасибо за ваше терпение со мной!
Дэйв
let _ = Random.self_init()
let silly_method1 x = x + (Random.int 10)
let silly_method2 _ = (Random.int 10)
let report1 x = (print_newline(); print_string("report1 begin: "); print_int (silly_method1 x); print_string("report1 end"); print_newline(); )
let report2 y = (print_newline(); print_string("report2 begin: "); print_int(silly_method2 y ); print_string("report2 end"); print_newline(); )
let _ = report1 3
let _ = report1 3
let _ = report1 3
let _ = report2 3
let _ = report2 3
let _ = report2 3