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是否为假继续?