首页 > 解决方案 > 为什么 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
  | 1 -> 1
  | _ -> fibo (n - 1) + fibo (n - 2);; 

工作正常:

斐波那契 12;;

- : 整数 = 233

这些声明不应该是等价的,我错过了什么?

标签: ocaml

解决方案


这就是我在第一个定义中弄错了。它应该是:

let rec fibo = function
    0 -> 1
  | 1 -> 1
  | n -> fibo (n - 1) + fibo (n - 2);;

这也很好用:

斐波那契 12;;

  • : 整数 = 233

推荐阅读