有没有一种方法可以将空元素添加到OCaml中的列表?

时间:2019-04-06 17:08:02

标签: ocaml

考虑给定列表[3;4;5]
现在,我要执行x::[3;4;5];;
在OCaml中是否有x会再次导致结果[3;4;5]

4 个答案:

答案 0 :(得分:7)

不,x::xs的结果将始终是一个列表,其元素比xs多。

如果您想有条件地将元素放在列表的前面,则必须执行if condition then x::xs else xs。也就是说,仅当您确实有要添加的元素时才使用::

答案 1 :(得分:4)

其他答案也都是正确的,但是我认为看看list的定义可能会有所帮助。

内幕之下,list大致如下:

type 'a list =
  | []
  | ( :: ) of 'a * 'a list

这意味着两件事:

  1. ( :: )始终将元素添加到现有列表的前面。
  2. 列表中的元素必须具有相同的类型。

因此,如果您已经有一个列表[3; 4; 5],那么x必须是int才能编译x :: [3; 4; 5]

答案 2 :(得分:1)

不,它们永远不能相等-第一个是长度为3的列表,另一个是长度为4的列表。

答案 3 :(得分:1)

不,::总是创建一个新列表,该列表长一个元素。

您可能要寻找的是@,它将一个列表追加到另一个列表(实际上,它在第二个列表之前先列出了第一个列表)。为此,您拥有[] @ list ==> list