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

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

More work on bits, bytes, nibbles, and added modules for byte7s and
words.

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
24
25end;;
26
27module Bit: BIT =
28struct
29  type bit = bool
30
31  let from_bool b = b
32  let from_int i =
33    if i > 0 then
34      true
35    else
36      false
37  let from_string =
38    function
39      "0" -> Some false
40    | "1" -> Some true
41    | _ -> None
42
43  let to_int =
44    function
45      false -> 0
46    | true -> 1
47  let to_string l =
48    match l with
49      true -> "1"
50    | false -> "0"
51
52  let to_bool b = b
53
54  let (-&-) l r =
55    match l with
56      true -> r
57    | false -> false
58  let (-|-) l r =
59    match l with
60      true -> true
61    | false -> r
62  let (-^-) (l: bit) r =
63    match l with
64      true -> not r
65    | false -> r
66  let not l =
67    match l with
68      true -> false
69    | false -> true
70end;;
Note: See TracBrowser for help on using the repository browser.