我试图弄清楚如何与用户定义的类型进行模式匹配。例如,我有这种类型。
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
答案 0 :(得分:0)
您应该考虑函数中有4种情况,每个构造函数一种。您不需要匹配这些构造函数中的内容,因为您可以递归调用自己来处理它。
您的代码调用count_chars
,但没有该名称的功能。如果应该是count_ints
,那么这不是一个很好的递归调用。您必须递归调用一个较小的问题。如果仅递归地将c
传递给自己,则会得到无限递归。
答案 1 :(得分:0)
let rec count_ints (c: custom_type):int =
match c with
| I _ -> 1
| C (c1,c2) -> count_ints c1 + count_ints c2
| _ -> 0