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

Lav*_*air 2 ocaml

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

sep*_*p2k 7

不,的结果x::xs始终是列表包含的元素多于一个xs

如果您想有条件地将元素添加到列表中,则必须这样做if condition then x::xs else xs。也就是说,仅::在您确实有要添加元素的情况下使用。


kev*_*nji 5

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

在引擎盖下,list大致如下所示:

type 'a list =
  | []
  | ( :: ) of 'a * 'a list
Run Code Online (Sandbox Code Playgroud)

这意味着两件事:

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

所以如果你已经有一个列表[3; 4; 5],那么x必须是一个intforx :: [3; 4; 5]来编译。