История изменений
Исправление www_linux_org_ru, (текущая версия) :
OCaml?
я думаю, что это не тот язык, который стал бы выжимать *такую* производительность; по первой же гуглессылке «ocaml difference let let rec» видим:
With let x = e1 in e2, the binding is only present in e2's environment, while with let rec x = e1 in e2 the binding is present in both e1 and e2's environments.
(Edit: I want to emphasize that it is not a performance issue, that makes no difference at all.)
ну и понятно, что имея ref, можно сделать рекурсивную функцию без let rec; тут я че-то накарябал на эту тему, вроде работает:
let wrong_answer n = 12345 in
let twice = ref wrong_answer in
let right_answer n =
match n with
| 0 -> 0
| x -> 2 + !twice( x-1 )
in
twice := right_answer;
!twice( 21 );;
пишет:
- : int = 42
Исходная версия www_linux_org_ru, :
OCaml?
я думаю, что это не тот язык, который стал бы выжимать *такую* производительность; по первой же гуглессылке «ocaml difference let let rec» видим:
With let x = e1 in e2, the binding is only present in e2's environment, while with let rec x = e1 in e2 the binding is present in both e1 and e2's environments.
(Edit: I want to emphasize that it is not a performance issue, that makes no difference at all.)
ну и понятно, что имея ref, можно сделать рекурсивную функцию без let rec; тут я че-то накарябал на эту тему, вроде работает:
let wrong_answer n = 12345 in
let twice = ref wrong_answer in
let right_answer n =
match n with
| 0 -> 0
| x -> 2 + !twice( x-1 )
in
twice := right_answer;
!twice( 21 );;
пишет:
- : int = 42