首页 > 解决方案 > 带有选项的递归模式匹配

问题描述

当你在 OCaml 中进行模式匹配并返回一个选项类型时,你让你的模式返回一个Some xor None。如果你的模式返回函数(递归),你需要放在Some它前面吗?让我更清楚地说明这一点:

示例代码:

let rec whatt (c: coding) : bool option = 
match c with
|a(a) -> Some a
|b(b) -> None
|d(x,s,l) -> Some whatt x and Some whatt s and Some whatt l 

我不确定 A.)如果你需要Some一些值,因为你得到并放回函数和 B.)我不确定在最后一行中分隔返回值的语法。和,&&,|| ?

标签: recursionpattern-matchingocaml

解决方案


好的,OCaml 中的“和”运算符是&&. 由于它的参数是bool和不是bool opt,你不能有一个表达式Some x && Some y

此外,您的函数whatt(根据假设)bool opt已经返回 a 。因此,您无需申请Some即可获得bool opt. 换句话说Some (whatt x),有 type bool opt opt,它离工作越来越远。

whatt第三,如果返回 None ,您需要决定您希望结果的值是什么。假设您想将两者都Some false视为None有效错误。然后你可以写这样的东西:

let bvalue = function Some b -> b | None -> false

bvalue (whatt x) && bvalue (whatt s) && bvalue (whatt l)

这可能不是您正在寻找的东西,但也许它会给您一些想法。


推荐阅读