在Haskell中,let/where构造中的声明顺序无关紧要,例如:
f x = let g1 x y = if x>y then show x else g2 y x
g2 p q = g1 q p
in ...
Run Code Online (Sandbox Code Playgroud)
在声明之前g2使用的地方g1.但这不是Ocaml的情况:
# let a = b in
let b = 5 in
a;;
Warning 26: unused variable b.
Error: Unbound value b
Run Code Online (Sandbox Code Playgroud)
有没有理由说OCaml不像Haskell那样?在没有前瞻性声明的情况下,此功能对我来说似乎很有用.
是因为OCaml的严格评估,还是Haskell的懒惰?