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
| 1 -> 1
| _ -> fibo (n - 1) + fibo (n - 2);;
工作正常:
斐波那契 12;;
- : 整数 = 233
这些声明不应该是等价的,我错过了什么?
解决方案
这就是我在第一个定义中弄错了。它应该是:
let rec fibo = function
0 -> 1
| 1 -> 1
| n -> fibo (n - 1) + fibo (n - 2);;
这也很好用:
斐波那契 12;;
- : 整数 = 233
推荐阅读
- python - 在 SpaCy 3.0 中将实体 ID 映射到字符串
- python-3.x - Python:如何返回函数内的变量?
- java - Selenium Java 将 UI 数据与 Excel 数据进行比较
- python - 数据增强以增加数据集大小
- html - thead-dark 在使用引导程序的角度项目中不起作用
- python - 如何在 tkinter 上使用检查按钮
- mysql - 如何计算mysql中两列中唯一对的数量
- python - Xgboost-ValueError:请在python中将输入数据X重塑为二维矩阵
- amazon-web-services - Attempting to Automate creation of Programmatic IAM User in AWS
- linux - Manjaro 没有出现在 systemd-boot 中