Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. type piece = King | Queen | Dvacher
  2.  
  3. module Cell = struct
  4.   type t = char * int
  5.   let compare = Pervasives.compare
  6. end
  7. module DvaChess = Map.Make(Cell)
  8.  
  9. let (>>=) = Lwt.(>>=)
  10.  
  11. let place piece board =
  12.   Lwt_io.(read_line_opt stdin) >>= function None -> Lwt.return board | Some command ->
  13.   if String.length command != 2 then Lwt.return board else
  14.   let x = String.get command 0 in
  15.   let y = String.get command 1 |> int_of_char in
  16.   board |> DvaChess.add (x,y-46) piece |> Lwt.return  
  17.  
  18. let show board =  
  19.   DvaChess.fold (fun (x,y) piece nil ->
  20.     let piece = match piece with
  21.     | King  -> "King" | Queen -> "Queen" | Dvacher -> "Dvacher"
  22.     in
  23.     nil >>= fun () -> Lwt_io.printf "%s ( %c , %d )\n" piece x y
  24.   ) board Lwt.return_unit >>= fun () ->
  25.   Lwt.return board
  26.  
  27. let rec thread board =
  28.   Lwt_io.(read_line_opt stdin) >>= function None -> Lwt.return_nil | Some command ->
  29.   ( match command with
  30.   | "King"    -> place King board
  31.   | "Queen"   -> place Queen board
  32.   | "Dvacher" -> place Dvacher board
  33.   | "Show"    -> show board  
  34.   | _ -> (Lwt_io.printl "WAT" >>= fun () -> Lwt.return board)
  35.   ) >>= thread
  36.  
  37. let () =
  38.   DvaChess.empty
  39.   |> thread
  40.   |> Lwt_main.run
  41.   |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement