source: Deliverables/D4.1/Bit.ml @ 64

Last change on this file since 64 was 64, checked in by mulligan, 10 years ago

More work on bits, bytes and nibbles.

File size: 1.5 KB
Line 
1(*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*)
2(* FILENAME:    Bit.ml                                                       *)
3(* DESCRIPTION: An ADT implementing bits, and common operations on them.     *)
4(* CREATED:     10/09/2010, Dominic Mulligan                                 *)
5(* BUGS:                                                                     *)
6(*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*)
7
8module type BIT =
9sig
10  type bit
11
12  val from_bool: bool -> bit
13  val from_int: int -> bit
14  val from_string: string -> bit option
15
16  val to_bool: bit -> bool
17  val to_int: bit -> int
18  val to_string: bit -> string
19
20  val (-&-): bit -> bit -> bit
21  val (-|-): bit -> bit -> bit
22  val (-^-): bit -> bit -> bit
23  val not: bit -> bit
24end;;
25
26module Bit: BIT =
27struct
28  type bit = bool
29
30  let from_bool b = b
31  let from_int i =
32    if i > 0 then
33      true
34    else
35      false
36  let from_string =
37    function
38      "0" -> Some false
39    | "1" -> Some true
40    | _ -> None
41
42  let to_int =
43    function
44      false -> 0
45    | true -> 1
46  let to_string l =
47    match l with
48      true -> "1"
49    | false -> "0"
50
51  let to_bool b = b
52
53  let (-&-) l r =
54    match l with
55      true -> r
56    | false -> false
57  let (-|-) l r =
58    match l with
59      true -> true
60    | false -> r
61  let (-^-) (l: bit) r =
62    match l with
63      true -> not r
64    | false -> r
65  let not l =
66    match l with
67      true -> false
68    | false -> true
69end;;
Note: See TracBrowser for help on using the repository browser.