List Ocaml:必要时展平列表
我从ocaml开始,我想知道如何使用类型为的递归函数 '列表->intList 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或
让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