首页 > 解决方案 > 使用不同类型的元组进行模式匹配

问题描述

我试图弄清楚如何与用户定义的类型进行模式匹配。例如我有这种类型。

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

标签: ocaml

解决方案


您应该考虑在您的函数中有 4 个案例,每个构造函数一个案例。您不需要匹配这些构造函数中的内容,因为您可以递归调用自己来处理它。

您的代码调用count_chars,但没有该名称的功能。如果它应该是count_ints,那么这不是一个好的递归调用。您必须递归调用一个较小的问题。如果您只是递归地传递c给自己,您将获得无限递归。


推荐阅读