int列表中的Ocaml问题

时间:2016-11-14 16:29:57

标签: ocaml

如何将元素添加到int列表中?

    |x::y::xs->  if(x<=y)                                                           
                 then [x]@(ordina (y::xs))
                 else [x]::ordina (y::xs)

我试过这个,但它没有用..

1 个答案:

答案 0 :(得分:1)

将包含x的新int列表添加到int list list的头部:

# let x = 14 in
let ill = [[3;4]; [5;6]] in
[x] :: ill ;;
- : int list list = [[14]; [3; 4]; [5; 6]]

你也可以这样写:

# let x = 14 in
let ill = [[3;4]; [5;6]] in
[[x]] @ ill ;;
- : int list list = [[14]; [3; 4]; [5; 6]]

但这需要进行少量不必要的工作。

作为旁注,你if的两个分支看起来像是在尝试做同样的事情。如果您希望结果为[[14; 3; 4]; [5; 6]],则需要编写更多代码来解构int list list

# let x = 14 in
let ill = [[3;4]; [5;6]] in
match ill with
| [] -> [[x]]
| h :: t -> (x :: h) :: t ;;
- : int list list = [[14; 3; 4]; [5; 6]]