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>