OCaml:如何返回列表的第一个元素,然后从列表中删除它?

时间:2016-05-07 02:55:34

标签: list functional-programming ocaml tail

我尝试使用 List.hd List.tl 执行此任务:

<video class="question-video" preload="none">
    <source src="path/to/video/video.mp4" type="video/mp4">
</video>

let takeCard fst deck = fst = List.hd deck List.tl deck 有两个参数,但我不明白为什么。

1 个答案:

答案 0 :(得分:1)

我认为这里存在一些误解。

首先,OCaml中的大多数类型都是不可变的。除非您使用mutable变量,否则无法“将其从列表中删除”,您只能返回没有该第一项的列表版本。如果你想要返回两件事,你可以使用tuple来实现这一点。

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

其次,List.hd只占用一个元素。 OCaml利用currying。当读取OCaml类型签名时,第一个参数是函数所接收的参数,最后一个参数是函数返回的参数。所以List.hd的签名'a list -> 'a意味着它包含一个包含('a用作占位符)的列表并返回列表包含的东西类型(在这种情况下是第一个元素)