Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. let lengths row =
  2. List.map row ~f:String.length
  3.  
  4. let max_width l1 l2 =
  5. List.map2_exn l1 l2 ~f:Int.max
  6. ;;
  7.  
  8. let widths header rows =
  9. List.fold rows
  10. ~init:(lengths header)
  11. ~f:(fun acc row ->
  12. max_width acc (lengths row)
  13. )
  14. ;;
  15.  
  16. let banner width =
  17. let banners = List.map width ~f:(fun len -> String.make len '-') in
  18. "|" ^ String.concat banners ~sep:"+" ^ "|\n"
  19. ;;
  20.  
  21. let line words width =
  22. let padded_words = List.map2_exn words width
  23. ~f:(fun word width -> word ^ (String.make (width - String.length word) ' '))
  24. in
  25. "|" ^ String.concat padded_words ~sep:"|" ^ "|\n"
  26. ;;
  27.  
  28. let render_table header rows =
  29. let width = widths header rows in
  30. let banner = banner width in
  31. let lines = List.map rows
  32. ~f:(fun words -> line words width)
  33. in
  34. String.concat lines ~sep:banner
  35. ;;
  36.  
  37. printf "%s\n" (render_table ["language";"architect";"first release"] [ ["Lisp" ;"John McCarthy" ;"1958"] ;
  38. ["C" ;"Dennis Ritchie";"1969"] ;
  39. ["ML" ;"Robin Milner" ;"1973"] ;
  40. ["OCaml";"Xavier Leroy" ;"1996"] ;
  41. ])
  42. ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement