Compilation f中的不完全模式匹配#
考虑以下代码:Compilation f中的不完全模式匹配#,compilation,f#,f#-interactive,f#-3.0,runtime-compilation,Compilation,F#,F# Interactive,F# 3.0,Runtime Compilation,考虑以下代码: let list1 = [1; 2; 3; 4; 5];; let getThird3 = function |[] ->[]; | _::_::l3::t -> t;; getThird3 list1; 当粘贴到运行fsharpi的终端上时,会出现此错误 > let list1 = [1; 2; 3; 4; 5];; val list1 : int list = [1; 2; 3; 4; 5] > let getThird3 = func
let list1 = [1; 2; 3; 4; 5];;
let getThird3 = function
|[] ->[];
| _::_::l3::t -> t;;
getThird3 list1;
当粘贴到运行fsharpi的终端上时,会出现此错误
> let list1 = [1; 2; 3; 4; 5];;
val list1 : int list = [1; 2; 3; 4; 5]
> let getThird3 = function
- |[] ->[];
- | _::_::l3::t -> t;;
let getThird3 = function
----------------^^^^^^^^
/Users/nickolasmorales/stdin(17,17): warning FS0025: Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s).
val getThird3 : _arg1:'a list -> 'a list
有什么建议吗?我尝试了两种方法:仅使用制表符和空格,但它无法识别函数后的任何内容。这只是一个警告: 如果执行
getThird3[1;2]
操作,您将获得一个匹配失败异常
警告必须选择某个特定位置作为警告的基础,并且功能可能与其他任何位置一样好
要删除警告,我将把匹配更改为
| _::_::l3::t -> t;;
| _ -> failwith "not a long enough list"
那么,我该如何得到答案呢?为了什么-编写的代码将正常工作-尝试执行类似以下操作:getThird3[1;2;3;4;5;6;7;8;9]
它与failwith一起工作!非常感谢。那么,我如何避免这样的警告并得到答案呢?你通过覆盖所有匹配案例来避免警告,你可以澄清你期望的输出是什么?由于这是基于您的问题和对此处一个答案的评论,我不知道您想要的是什么。顺便说一句,您在最后一行缺少第二个分号(getThird3 list1;
应该是getThird3 list1;;
)。这可能就是为什么,即使你修正了你的函数,让它处理带有一个或两个输入项的列表,你仍然看不到结果。F#在表达式之间不需要分号,但F#交互式解释器在表达式之间使用双分号,因此它知道何时完成输入。(因为单分号是一个有效的运算符,在列表中使用)。