Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation f中的不完全模式匹配#_Compilation_F#_F# Interactive_F# 3.0_Runtime Compilation - Fatal编程技术网

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#交互式解释器在表达式之间使用双分号,因此它知道何时完成输入。(因为单分号是一个有效的运算符,在列表中使用)。