OCaml:如何 return 列表的第一个元素,然后将其从列表中删除?

OCaml: How can I return the first element of a list and after that remove it from the list?

我尝试使用 List.hdList.tl 来完成此任务:

let takeCard fst deck =   
fst = List.hd deck   
List.tl deck

List.hd 有两个参数,但我不明白为什么。

我认为这里有几个误解。

首先,OCaml 中的大多数类型不可变。除非你使用 mutable variables you can't "remove it from the list", you can only return a version of the list that doesn't have that first item. If you want to return both things you can achieve that using a tuple.

let takeCard deck = (List.hd deck, List.tl deck)

其次,List.hd只取一个元素。 OCaml 利用 currying。当读取 OCaml 类型签名时,第一个参数是函数接收的内容,最后一个参数是函数 returns。所以 List.hd 的签名 'a list -> 'a 意味着它接受一个列表,其中包含('a 用作占位符)和 returns 列表包含的东西类型(在本例中是第一个元素)。