【发布时间】:2017-03-29 04:02:29
【问题描述】:
我制作了一个函数,它接受一个列表和一个列表列表并返回一个新的列表列表。
let rec calculator list SS =
match (List.item(0) SS) with
|[] -> []
|_ -> match (validate list (List.item(0) SS)) with
|(validate theCode list) -> List.append [(List.item(0) SS)] (calculator list (SS.[1..]))
|_ -> (calculator list (SS.[1..]))
validate 是一个返回两个元组整数的函数。示例 (1,1)
list 是四个整数的列表
SS 是一个包含四个整数的列表
theCode 是四个整数的列表
我收到错误“模式鉴别器'验证'未定义。”
也许这是一个愚蠢的问题,但我仍然不知道答案。
是否不允许在匹配表达式中使用函数作为参数。还是这里发生了完全不同的事情?
据我所知,这两个验证函数将返回两个元组整数,因此应该能够匹配。
【问题讨论】:
-
我认为你想要一个活动模式
-
"validate 是一个返回两个元组整数的函数。" 假设该函数验证某个输入,当输入有效时它返回什么?输入无效时返回什么?
-
要编译它,请将
|(validate theCode list) ->替换为| x when x = (validate theCode list) ->。但正如@JohnPalmer 暗示的那样,这很丑陋——即使是if..else在这里也会更干净。 -
它永远不会返回无效的东西。它总是会返回有效的东西。它至少会返回 (0,0) ,我告诉它删除列表列表中的所有元素
-
好的,这里首选的方法是什么?我不太明白这种活动模式在这里有什么用处。
标签: list f# match discriminator guard-clause