Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let lengths row =
- List.map row ~f:String.length
- let max_width l1 l2 =
- List.map2_exn l1 l2 ~f:Int.max
- ;;
- let widths header rows =
- List.fold rows
- ~init:(lengths header)
- ~f:(fun acc row ->
- max_width acc (lengths row)
- )
- ;;
- let banner width =
- let banners = List.map width ~f:(fun len -> String.make len '-') in
- "|" ^ String.concat banners ~sep:"+" ^ "|\n"
- ;;
- let line words width =
- let padded_words = List.map2_exn words width
- ~f:(fun word width -> word ^ (String.make (width - String.length word) ' '))
- in
- "|" ^ String.concat padded_words ~sep:"|" ^ "|\n"
- ;;
- let render_table header rows =
- let width = widths header rows in
- let banner = banner width in
- let lines = List.map rows
- ~f:(fun words -> line words width)
- in
- String.concat lines ~sep:banner
- ;;
- printf "%s\n" (render_table ["language";"architect";"first release"] [ ["Lisp" ;"John McCarthy" ;"1958"] ;
- ["C" ;"Dennis Ritchie";"1969"] ;
- ["ML" ;"Robin Milner" ;"1973"] ;
- ["OCaml";"Xavier Leroy" ;"1996"] ;
- ])
- ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement