ocaml类型单元与列表不匹配
为了这个签名ocaml类型单元与列表不匹配,ocaml,typechecking,Ocaml,Typechecking,为了这个签名 val chooser: string list * string list -> string list 这个实现呢 let rec chooser (inputList, trueList) = match inputList with [] -> [] | iH::iT -> if (List.hd trueList)="True" then iH::(chooser iT List.tl trueList) 我得
val chooser: string list * string list -> string list
这个实现呢
let rec chooser (inputList, trueList) = match inputList with
[] -> []
| iH::iT -> if (List.hd trueList)="True"
then iH::(chooser iT List.tl trueList)
我得到以下错误:
错误:此变量表达式的类型应为unit
构造函数::不属于单元
我做错了什么 未明确定义
else
部分-因此,当条件未统计时,else部分为()(即单位)。
编译器类型检查iH::(选择iT List.tl trueList)
为unit
,不能是这种情况:
if cond
then A
else B
A
和B
具有相同的类型。未明确定义else
部分-因此,当条件未确定时,else部分为()(即单位)。
编译器类型检查iH::(选择iT List.tl trueList)
为unit
,不能是这种情况:
if cond
then A
else B
A
和B
具有相同的类型。如果。。。然后不带的
else必须是单位
,因为当表达式为false时,值将是()
(类型单位
)的值
换句话说,您的
if
需要一个else
部件来获得所需的类型。当比较为false时,值应该是多少?如果。。。然后不带的
else必须是单位
,因为当表达式为false时,值将是()
(类型单位
)的值
换句话说,您的
if
需要一个else
部件来获得所需的类型。当比较为false时,该值应该是多少?功能设置中不能跳过案例。表达式一直都有值,这只是值是什么的问题!示例表达式:设y=如果x<5,则x+1,否则x
。您可以说这“跳过”了x>=5的情况。但它总是有价值的。非常感谢@Jeffrey!对于错误的情况,我不得不添加带尾部的递归。它起作用了:)在功能设置中不能跳过案例。表达式一直都有值,这只是值是什么的问题!示例表达式:设y=如果x<5,则x+1,否则x
。您可以说这“跳过”了x>=5的情况。但它总是有价值的。非常感谢@Jeffrey!对于错误的情况,我不得不添加带尾部的递归。它起作用了:)如何判断REPL是否为假继续?如何判断REPL是否为假继续?