ocaml - 使用不同类型的元组进行模式匹配
问题描述
我试图弄清楚如何与用户定义的类型进行模式匹配。例如我有这种类型。
Type custom_type = B of bool | I of int | S of string | C of custom_type * custom_type
我想对这些类型进行模式匹配,例如计算一个值中的整数数量。示例值:
C(C(B true, I 5), C(S "example", B false))
我想我已经非常接近了,我知道我需要使用通配符,但我不能写出可能存在的每个实例,因为我需要检查许多不同的值。
谢谢!
编辑:不工作的代码:
let num = 0
let rec count_ints (c: custom_type):int =
match c with
| C (I(_), _) -> num + 1
| C (_, I(_)) -> num + 1
| C (C(_), _) -> count_ints c
| C (_, C(_)) -> count_ints c
解决方案
您应该考虑在您的函数中有 4 个案例,每个构造函数一个案例。您不需要匹配这些构造函数中的内容,因为您可以递归调用自己来处理它。
您的代码调用count_chars
,但没有该名称的功能。如果它应该是count_ints
,那么这不是一个好的递归调用。您必须递归调用一个较小的问题。如果您只是递归地传递c
给自己,您将获得无限递归。
推荐阅读
- python - 错误代码 413:已超出传出邮件 (1114112) 的最大邮件大小配额
- kubernetes - gcp k8s 内部负载均衡器不适用于端口 8081
- sql - 在更新中锁定“选择”......来自选择 - postgresql
- mysql - 为什么这个查询会在 MySQL 5 中运行,但不能在 MySQL 8 中运行
- c - c语言中浮点数四舍五入背后的逻辑是什么?
- android - 来自指纹扫描仪安卓的原始手势
- css - Material-UI makeStyles 未将 css 样式实现为材质 ui 组件
- npm - 如何摆脱 gyp 错误?
- ios - 为什么这总是返回,即使它不应该被发现?
- ruby-on-rails - 在 docker-compose 中使用带有 pry 的键箭头时遇到问题