Facebook
From Ivory Earthworm, 1 Year ago, written in OCaml (Objective Caml).
Embed
Download Paste or View Raw
Hits: 290
  1. module type Container =
  2. sig
  3.         type 'a t
  4.         exception Empty of string
  5.         exception Full of string
  6.        
  7.         val create: unit -> 'a t
  8.         val put: 'a * 'a t -> unit
  9.         val take: 'a t -> 'a
  10. end;;
  11.  
  12. module ContainerOption =
  13. struct
  14.                 type 'a t = { mutable a : 'a option }
  15.                 exception Empty of string
  16.                 exception Full of string
  17.                
  18.                 let create() = { a = None }
  19.                
  20.                 let put (e, c) =
  21.                         match c.a with
  22.                         | None -> (c.a <- Some e)
  23.                         | _ -> raise(Full "f")
  24.                
  25.           let take c =
  26.                         match c.a with
  27.                         | None -> raise(Empty "e")
  28.                         | Some e -> begin
  29.                                                                                 c.a <- None;
  30.                                                                                 e
  31.                                                                         end
  32. end;;
  33.  
  34. let cO = ContainerOption.create();;
  35. ContainerOption.put(1, cO);;
  36. ContainerOption.take cO;;
  37.  
  38.  
  39. module ContainerList =
  40. struct
  41.         type 'a t = { mutable n : int; mutable a : 'a list }
  42.         exception Empty of string
  43.         exception Full of string
  44.        
  45.         let create() = { n = 0; a = [] }
  46.        
  47.         let put (e, c) =
  48.                 match c.n with
  49.                 | 0 -> begin    c.a <- [e]; c.n <- c.n + 1 end
  50.                 | _ -> raise (Full "f")
  51.        
  52.         let take c =
  53.                 match c.n with
  54.                 | 0 -> raise (Empty "e")
  55.                 | _ -> begin c.n <- c.n - 1; c.a end
  56.  
  57. end;;
  58.  
  59. let cL = ContainerList.create();;
  60. ContainerList.put(1, cL);;
  61. ContainerList.take cL;;

Replies to Untitled rss

Title Name Language When
Re: Untitled Hot Shama ocaml 1 Year ago.