Если вы хотите эмулировать не только строгость, то все, что вам нужно, - это заключить выражение в функцию и вызвать его при необходимости.
Если вы действительно хотите эмулировать лень (то есть нестрогость с запоминанием), то вам нужно обернуть эту функцию в изменчивую ссылку. Эскиз в OCaml (без учета исключений):
type 'a lazy = 'a thunk ref
and 'a thunk = Lazy of unit -> 'a | Memo of 'a
let lazy f = ref (Lazy f)
let force l = match !l with
| Lazy f -> let x = f () in l := Memo x; x
| Memo x -> x
За исключением того, что OCaml уже имеет это предопределенное значение в своей библиотеке (таким образом, что также обрабатывает исключения из f).