我有以下代码
let rec function1 element1 element2 = function
| [] -> []
| [a;b;c;d;e;f]::t -> if true then if true then [a]::(function1 element1 element2 t) else (function1 element1 element2 t)
| h :: t -> (function1 element1 element2 t);
,但它不会让我检查语句1和语句2是否为真
我一直在
| [a;b;c;d;e;f]::t -> if true then if true then [a]::(function1 element1 element2 t) else (function1 element1 element2 t)
------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
stdin(3,31): error FS0001: This expression was expected to have type
'a list
but here has type
unit
我尝试了很多不同的东西,看起来我似乎正在尝试一些不起作用的东西。请帮忙
答案 0 :(得分:3)
您的陈述读作:
if true
then
if true
then something
else somethingElse
// missing else
如果整体表达式的类型应为else
,则语句可能省略unit
分支。因此,当您省略else
时,您可以考虑只编译器添加else ()
。
另一方面,您定义match
语句应该返回一个列表。
答案 1 :(得分:0)
由于你有2个但是只有1个其他分支,编译器已经将返回类型推断为单位,因为只有1个if表达式返回非单位。
您可以通过
解决此问题1:取消嵌套 - 当你能够&& amp;&条件
2:添加额外的else分支(在你的情况下会返回(function1 element1 element2 t))