函数调用OCaml中的顺序

pow*_*put 1 ocaml

我在OCaml中发现了trace函数来跟踪函数调用.我用斐波纳契尝试了它,但是函数调用的顺序并不是我期待的那个.在我的代码中,我fib (n - 1)首先调用,fib (n - 2)但是,通过跟踪,它告诉我fib (n - 2)实际上是第一次调用.是什么原因?

let rec fib n = 
    if n < 2 then 1
    else fib (n - 1) + fib (n - 2);;
Run Code Online (Sandbox Code Playgroud)

当我追踪时,fib 3我得到:

fib <-- 3
fib <-- 1
fib --> 1
fib <-- 2
fib <-- 0
fib --> 1
fib <-- 1
fib --> 1
fib --> 2
fib --> 3
- : int = 3
Run Code Online (Sandbox Code Playgroud)

Pas*_*uoq 5

你的功能包括: fib (n - 1) + fib (n - 2)

+未指定评估操作数的顺序.字节码OCaml编译器和本机OCaml编译器甚至可以使用不同的命令.无论出于何种原因,您使用的编译器只是选择生成fib (n - 2)先评估的代码fib (n - 1),然后计算总和.