polymorphism - int list -> int 而不是 'a list -> 'a
问题描述
我是 ocaml 的新手(我正在学校学习),在我的练习中,我需要编写一个函数来给出 int 列表的最小值。我写道:
let rec minimum liste =
match liste with
|[a] -> a
|[a;b] -> if a<b then a else b
|a::b::r -> if a<b then minimum (a::r) else minimum (b::r)
;;
但是,ocaml 告诉我:
val minimum : 'a list -> 'a = <fun>
正如我所说,我需要val minimum : int list -> int = <fun>
你能帮帮我吗?谢谢 !
解决方案
您的代码不会做任何取决于输入是任何特定类型的事情。因此 OCaml(或多或少正确)推断它适用于任何类型的列表。
如果你愿意,你可以通过像这样指定函数参数来限制它们的类型:
let f (x: type) = ...
所以你可以说:
let rec minimum (liste: int list) = ...
(作为旁注,您可以在一个空列表上尝试您的功能,看看会发生什么。)
推荐阅读
- flutter - Flutter null 安全问题,无法编译
- javascript - indexOf 方法在 Javascript 中的工作原理
- python - 我正在尝试在 Jupyter 笔记本中创建一个 Deepfake,但它说找不到模块
- gatsby - 如何通过 sourceNodes api 使用 Gatsby 缓存
- maven - Maven:如何将 shell 脚本作为人工制品进行管理
- php - 如果通过 PHP 在 MySql 输出中更改值,则换行 HTML
- c++ - 返回 3 变量形式函数
- python - hackerrank python 3 字符串操作,8 个不同字符串的恢复函数
- keycloak - KeyCloak - 如何访问旧的用户帐户控制台?
- python - 安装 manim 时在 windows 上安装 requirements.txt 文件时出现问题