recursion - 带有选项的递归模式匹配
问题描述
当你在 OCaml 中进行模式匹配并返回一个选项类型时,你让你的模式返回一个Some x
or 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.)我不确定在最后一行中分隔返回值的语法。和,&&,|| ?
解决方案
好的,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)
这可能不是您正在寻找的东西,但也许它会给您一些想法。
推荐阅读
- scala - 如何用 csv 数据解析一个巨大的文件并在普通 Scala 中计算其一列的平均值?
- php - PHP/HTML 按钮仅适用于循环中的第一个元素
- python - 在 Django 项目中显示来自另一个应用程序的模板时的 TemplateDoesNotExist
- javascript - 如何删除 [connect to metro to development javascript in react native apps]
- powershell - 设置 Exploit Education Phoenix 中的 powershell 脚本问题
- d3.js - d3.js - 连接数据更新行为
- javascript - Svg“图表”填充
- python - 需要从内容流中抓取
- jenkins - podRetention 似乎没有效果
- go - 在这些情况下使用或不使用指针?