列表OCaml的第一个和最后一个元素

mie*_*ooy 4 ocaml functional-programming

我想在OCaml中获取列表的第一个和最后一个元素.我希望我的功能会像

'a list -> 'a * 'a
Run Code Online (Sandbox Code Playgroud)

我想做的是

let lista = [1;2;3;4;6;0];;

let rec first_last myList =
        match myList with
        [x] -> (List.hd lista,x)
        | head::tail ->     
                  first_last tail;;

first_last lista;;
Run Code Online (Sandbox Code Playgroud)

当然因为我把列表作为整数然后我正在做这样的语法

*int list -> int * 'a
Run Code Online (Sandbox Code Playgroud)

关键是我不知道如何为'a做这个功能.

方向是什么?

ivg*_*ivg 8

方向是编写两个不同的函数first,last并实现以下first_and_last功能:

let first_and_last xs = first xs, last xs
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种只有一个功能的可能性:

let rec first_last = function
    | [] -> failwith "too bad"
    | [e] -> failwith "too bad"
    | [e1;e2] -> (e1,e2) 
    | e1 :: _ :: r -> first_last (e1::r)
Run Code Online (Sandbox Code Playgroud)

你可能更喜欢这样:

let rec first_last myList = match myList with
    | [] -> failwith "too bad"
    | [e] -> failwith "too bad"
    | [e1;e2] -> (e1,e2) 
    | e1 :: _ :: r -> first_last (e1::r)
Run Code Online (Sandbox Code Playgroud)

  • `first_last [x]` 应该返回 `x,x` (4认同)