为什么ocaml中函数定义中的替代项会给出不同的结果?
windows 10上的ocaml 4.01.0+ocp1 刚接触ocaml时,我在toploop中遇到了一个有趣的行为:为什么ocaml中函数定义中的替代项会给出不同的结果?,ocaml,Ocaml,windows 10上的ocaml 4.01.0+ocp1 刚接触ocaml时,我在toploop中遇到了一个有趣的行为: let rec fibo n = function 0 -> 1 | 1 -> 1 | _ -> fibo (n - 1) + fibo (n - 2);; 抛出: 错误:此表达式的类型为int->int 但表达式应为int类型 而 let rec fibo n = match n with 0 -> 1 |
let rec fibo n = function
0 -> 1
| 1 -> 1
| _ -> fibo (n - 1) + fibo (n - 2);;
抛出:
错误:此表达式的类型为int->int
但表达式应为int类型
而
let rec fibo n =
match n with
0 -> 1
| 1 -> 1
| _ -> fibo (n - 1) + fibo (n - 2);;
工作正常:
fibo12
-:int=233
这些声明是否应该是等价的,我遗漏了什么?这就是我在第一个定义中出错的地方。应改为:
let rec fibo = function
0 -> 1
| 1 -> 1
| n -> fibo (n - 1) + fibo (n - 2);;
这也很好:
fibo12
:int=233
这就是我在第一个定义中犯的错误。应改为:
let rec fibo = function
0 -> 1
| 1 -> 1
| n -> fibo (n - 1) + fibo (n - 2);;
这也很好:
fibo12
:int=233
我将为未来的读者详细介绍一下你完美的自我回答 在OCaml中,function关键字向模式匹配中使用的函数添加匿名参数。换句话说,你的第一次尝试 设rec fibo n=函数 | 0 -> 1 | 1 -> 1 |_u->fibon-1+fibon-2;; 相当于 让我们来讨论一下= 匹配 | 0 -> 1 | 1 -> 1 |_u->fibon-1+fibon-2;; 这不符合签出类型
您可以在中阅读有关函数关键字的更多信息。我将为未来的读者详细介绍一下您完美的自我回答 在OCaml中,function关键字向模式匹配中使用的函数添加匿名参数。换句话说,你的第一次尝试 设rec fibo n=函数 | 0 -> 1 | 1 -> 1 |_u->fibon-1+fibon-2;; 相当于 让我们来讨论一下= 匹配 | 0 -> 1 | 1 -> 1 |_u->fibon-1+fibon-2;; 这不符合签出类型 您可以在中阅读有关函数关键字的更多信息