OCaml:修改函数的输入类型数据
OCaml: Modify input typed data for a function
我有一个函数 "flat" 以这种方式工作
let myList=[(0,1);(0,2);(0,3);(1,5);(2,4);(3,5);(5,4);(5,6);(4,3)];;
let flat = List.fold_left (fun acc (x,y) -> x::y::acc) [] ;;
flat myList
- : int list = [4; 3; 5; 6; 5; 4; 3; 5; 2; 4; 1; 5; 0; 3; 0; 2; 0; 1]
我有一个这样定义的类型化数据图:
type 'a graph = Gr of ('a * 'a ) list;;
let myList2= Gr[(0,1);(0,2);(0,3);(1,5);(2,4);(3,5);(5,4);(5,6);(4,3)];;
如何修改此类型的"flat"?
结果应该相同,但输入必须是图形
您可以通过简单匹配从图形类型中提取列表:
let Gr l = myList2 in
flat l;;
你可以这样做:
# type 'a graph = Gr of ('a * 'a ) list;;
type 'a graph = Gr of ('a * 'a) list
# let flat (Gr l)= List.fold_left (fun acc (x,y) -> x::y::acc) [] l;;
val flat : 'a graph -> 'a list = <fun>
我有一个函数 "flat" 以这种方式工作
let myList=[(0,1);(0,2);(0,3);(1,5);(2,4);(3,5);(5,4);(5,6);(4,3)];;
let flat = List.fold_left (fun acc (x,y) -> x::y::acc) [] ;;
flat myList
- : int list = [4; 3; 5; 6; 5; 4; 3; 5; 2; 4; 1; 5; 0; 3; 0; 2; 0; 1]
我有一个这样定义的类型化数据图:
type 'a graph = Gr of ('a * 'a ) list;;
let myList2= Gr[(0,1);(0,2);(0,3);(1,5);(2,4);(3,5);(5,4);(5,6);(4,3)];;
如何修改此类型的"flat"?
结果应该相同,但输入必须是图形
您可以通过简单匹配从图形类型中提取列表:
let Gr l = myList2 in
flat l;;
你可以这样做:
# type 'a graph = Gr of ('a * 'a ) list;;
type 'a graph = Gr of ('a * 'a) list
# let flat (Gr l)= List.fold_left (fun acc (x,y) -> x::y::acc) [] l;;
val flat : 'a graph -> 'a list = <fun>