sig
type t = D | A
- val of_int : int -> t
+ val random : unit -> t
- val to_int : t -> int
+ val is_alive : t -> bool
val to_cell : t -> Cell.t
struct
type t = D | A
- let of_int = function
+ let random () =
+ match Random.int 2 with
| 0 -> D
| 1 -> A
| _ -> assert false
- let to_int = function
- | D -> 0
- | A -> 1
+ let is_alive = function
+ | D -> false
+ | A -> true
let to_pheno = function
| D -> PhenoType.create ' ' None
| D -> D
end
- let create () =
- Random.int 2 |> State.of_int |> State.to_cell
+ let create =
+ State.random |- State.to_cell
- let count_of_live neighbors =
- neighbors |> List.map ~f:(State.of_cell_state |- State.to_int)
- |> List.fold_left ~init:0 ~f:(+)
+ let count_of_live =
+ List.map ~f:State.of_cell_state
+ |- List.filter ~f:State.is_alive
+ |- List.length
let transition ~self ~neighbors =
self |> State.of_cell_state
val is_burning : t -> bool
- val of_int : int -> t
-
- val to_int : t -> int
+ val random : unit -> t
val to_cell : t -> Cell.t
| T -> false
| B -> true
- let of_int = function
+ let random () =
+ match Random.int 3 with
| 0 -> E
| 1 -> T
| 2 -> B
| _ -> assert false
- let to_int = function
- | E -> 0
- | T -> 1
- | B -> 2
-
let to_pheno = function
| E -> PhenoType.create ' ' None
| T -> PhenoType.create 'T' (Some `green)
| B, _ -> E
end
- let create () =
- Random.int 3 |> State.of_int |> State.to_cell
+ let create =
+ State.random |- State.to_cell
- let count_of_burning neighbors =
- neighbors |> List.map ~f:State.of_cell_state
- |> List.filter ~f:State.is_burning
- |> List.map ~f:State.to_int
- |> List.fold_left ~init:0 ~f:(+)
+ let count_of_burning =
+ List.map ~f:State.of_cell_state
+ |- List.filter ~f:State.is_burning
+ |- List.length
let transition ~self ~neighbors =
self |> State.of_cell_state