List Ocaml:必要时展平列表

List Ocaml:必要时展平列表,list,ocaml,List,Ocaml,我从ocaml开始,我想知道如何使用类型为的递归函数 '列表->int 让rec int l= 匹配 | [] -> 0 |hd::tl->10 只有在必要时才能展平列表 例如,如果[0;2;3;4]只返回int 如果[0];2;[3;4]],则执行->[0;2;3;4],然后返回int 提前谢谢。您不能在列表中直接存储列表或数字,因为列表必须存储相同类型的值 但是,您可以为这两种类型的值声明一个变量类型(标记的union) 这里类型'a lisr\u或

我从ocaml开始,我想知道如何使用类型为的递归函数 '列表->int

让rec int l=
匹配
| [] -> 0
|hd::tl->10
只有在必要时才能展平列表 例如,如果[0;2;3;4]只返回int 如果[0];2;[3;4]],则执行->[0;2;3;4],然后返回int


提前谢谢。

您不能在列表中直接存储列表或数字,因为列表必须存储相同类型的值

但是,您可以为这两种类型的值声明一个变量类型(标记的union)

这里类型
'a lisr\u或
表示类型
'a
的值,例如
(a3)
,或类型
'a lisr\u或
的值列表,例如
(l3);(a5)]

然后访问最左边的值,如下所示:

let rec leftmost_value term = match term with
  | L ([]) -> failwith "Unexpected"
  | L (x::_) -> leftmost_value x
  | A v -> v;;
例如:

# leftmost_value (L [A 5; A 3]);;
- : int = 5

您能否在OCaml中表示
[[0];2;[3;4]]
?为什么不呢?很抱歉,这是我的第一篇文章,用代码格式表示它很重要吗?不,不,我的意思是你键入了这个列表,但这在OCaml中不是一个有效的值,因为
'a list
是某种类型的元素的列表
'a
,但是2和
[2]
有不同的类型,这就是为什么我想知道我是否可以在类型的函数中生成if语句,或者如果类型不正确,是否可以打印类型的错误
# leftmost_value (L [A 5; A 3]);;
- : int = 5