LINUX.ORG.RU

История изменений

Исправление 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