如果我在F#中有自定义列表类型,我如何得到该类型列表的头部和尾部

Ben*_*eem 2 f# reverse list

我在F#中有一个自定义列表,例如:

type 'element mylist = NIL | CONS of 'element * 'element mylist
Run Code Online (Sandbox Code Playgroud)

我想使用类似的东西来反转这种类型的列表

let rec helperOld a b =
    match a with
    | [] -> b
    | h::t -> helperOld t (h::b)

let revOld L = helperOld L []
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的就是做类似的事情

let rec helper a b = 
    match a with
    | NIL -> b
    | CONS(a, b) -> helper //tail of a, head of a cons b
Run Code Online (Sandbox Code Playgroud)

然而,我无法弄清楚如何获得尾部和头部.标准a.Head和a.Tail不起作用.如何在此自定义列表中访问这些元素?

Cha*_*ert 6

你的辅助函数不需要使用Head或Tail函数,因为它可以通过模式匹配将这些值拉出:

let rec helper a b = 
    match a with
    | NIL -> b
    | CONS(x, xs) -> helper xs (CONS(x, b))
Run Code Online (Sandbox Code Playgroud)

标准的头部和尾部功能不起作用,因为您有自定义列表定义.您可以使用模式匹配创建自己的函数,这类似于您要删除的路径:

let myHead xs =
    match xs with
    | NIL -> None
    | CONS(h, _) -> Some(h)

let myTail xs =
    match xs with
    | NIL -> None
    | CONS(_, t) -> Some(t)
Run Code Online (Sandbox Code Playgroud)