递归模式与选项匹配

时间:2018-10-04 01:17:11

标签: recursion pattern-matching ocaml

在OCaml中对匹配进行模式化并返回选项类型时,将使模式返回Some xNone。如果您的模式(递归地)返回了该函数,您是否需要将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。)我不确定将返回的值分隔开的语法最后一行中的值。而且,&&,|| ?

1 个答案:

答案 0 :(得分:1)

好的,OCaml中的“ and”运算符是&&。由于其参数是bool而不是bool opt,因此不能有表达式Some x && Some y

此外,您的函数whatt(通过假设)已经返回了bool opt。因此,您无需对其应用Some即可获得bool opt。换句话说,Some (whatt x)的类型为bool opt opt,距离工作越来越远。

第三,如果whatt返回None,则需要确定结果的值是什么。假设您想同时将Some falseNone都视为错误。然后,您可以编写如下内容:

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

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

这可能不完全是您想要的,但也许会给您一些想法。