考虑给定的列表[3;4;5]。
现在,我要执行OCaml中x::[3;4;5];;
是否有一个可再次x导致结果[3;4;5]?
不,的结果x::xs始终是列表包含的元素多于一个xs。
如果您想有条件地将元素添加到列表中,则必须这样做if condition then x::xs else xs。也就是说,仅::在您确实有要添加元素的情况下使用。
其他答案也是正确的,但我认为看看如何list定义可能会有所帮助。
在引擎盖下,list大致如下所示:
type 'a list =
| []
| ( :: ) of 'a * 'a list
Run Code Online (Sandbox Code Playgroud)
这意味着两件事:
( :: ) 将始终将元素添加到现有列表中。所以如果你已经有一个列表[3; 4; 5],那么x必须是一个intforx :: [3; 4; 5]来编译。