OCaml:修改函数的输入类型数据

时间:2016-01-26 16:15:35

标签: ocaml

我有一个以这种方式工作的“平面”功能

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]

我有一个以这种方式定义的Typed数据图:

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)];;

如何修改此类型的“平面”?

结果应该相同,但输入必须是图表

2 个答案:

答案 0 :(得分:1)

您可以通过简单匹配从图表类型中提取列表:

let Gr l = myList2 in 
       flat l;;

答案 1 :(得分:1)

你可以这样做:

  # 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>