ocaml - 如何更改树的类型以返回几乎任何类型的树的正确值?
问题描述
我试图找到节点树的最大值,但我遇到了这种错误 This expression has type int bintree
but an expression was expected of type 'a bintree bintree
。类型int
与类型不兼容'a bintree
。
type 'a bintree =
| Nil
| T of 'a bintree * 'a * 'a bintree ;;
let t = T (T (T (Nil, 1, Nil), 2, T (Nil, 3, Nil)), 4, T (T (Nil, 6, Nil), 5, Nil)) ;;
let rec maximum t =
match t with
|Nil -> Nil
| T (Nil, v, Nil) -> v
| T (l, v, r) -> max (maximum l) (maximum r) ;;
解决方案
您的问题是确定空树的最大值。最大值应该是 type'a
但你要返回Nil
的是 type 'a bintree
。
这实际上是一个有趣的问题。您需要一个适用于任何类型的值。但是真的没有这样的价值。
一种可能性是有一个额外的参数来指定当树为空时要使用的值。对于树中的任何类型,它将表示负无穷大(可能的最小值)。
正如@ThéoWinterhalter 所建议的,另一个(可能更好的)解决方案是让你的函数返回类型'a option
。它会None
在树为空时返回,Some maxval
否则返回。
推荐阅读
- javascript - 如何使用 mocha 测试将 XML 字符串发布到本地 API?
- c++ - 在 Qt 信号和槽中使用 lambda 语法并访问传递的参数
- node.js - SyntaxError: JSON 输入意外结束,同时在'...: {"name":"@babel/plug'附近解析?
- java - Tomcat 套接字侦听超时
- javascript - 甜甜圈图:如何翻转数字?
- c++ - LLVM - 从带有偏移量的指针加载变量
- azure - 使用应用服务环境时,我是否需要自己的 DNS 服务器来从 API 管理到应用服务以及应用服务之间进行通信?
- c++ - QTableWidgetItem 文本已更改
- javascript - 为列表中的每个项目创建一个新工作表的 Javascript 代码
- android - 如何访问命名对象内的 JSON 数组?