我正在编写一个函数来返回一个减去第三个值的列表.这是我目前的代码:
let listString = [ "1"; "2"; "3"; "4" ];;
let del3 (listA :'a) = [listA.Head; listA.Tail.Head] @ [listA.Tail.Tail.Tail];;
del3 listString
Run Code Online (Sandbox Code Playgroud)
我收到错误:
根据此程序点之前的信息查找不确定类型的对象.在此程序点之前可能需要类型注释来约束对象的类型.这可以允许解析查找.
我应该更改什么来修复错误?
Joh*_*mer 16
我认为基于模式匹配的更简单的方法可能会更好
let del3 = function |a::b::c::d -> a::b::d | _ -> failwith "insufficient input"
Run Code Online (Sandbox Code Playgroud)
您需要让编译器知道listA是一个列表.Tail还会返回一个列表,所以对于第二个列表,你要追加你不想将尾部包裹在一个列表中,否则你将会得到一个列表列表:
let listString = [ "1"; "2"; "3"; "4" ]
let del3 (listA :'a list) = [listA.Head; listA.Tail.Head] @ listA.Tail.Tail.Tail
del3 listString;;
Run Code Online (Sandbox Code Playgroud)
处理所有大小的列表的解决方案:
let del3 = function
| a::b::c::tail -> a::b::tail
| list -> list
Run Code Online (Sandbox Code Playgroud)