删除F#列表中的第三个元素

jth*_*h41 3 f#

我正在编写一个函数来返回一个减去第三个值的列表.这是我目前的代码:

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)

  • +1模式匹配很漂亮:-) (3认同)

Mat*_*igh 7

您需要让编译器知道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)