在OCaml中对匹配进行模式化并返回选项类型时,将使模式返回Some x
或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。)我不确定将返回的值分隔开的语法最后一行中的值。而且,&&,|| ?
答案 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 false
和None
都视为错误。然后,您可以编写如下内容:
let bvalue = function Some b -> b | None -> false
bvalue (whatt x) && bvalue (whatt s) && bvalue (whatt l)
这可能不完全是您想要的,但也许会给您一些想法。