home
/
code
/
cellular-automata.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update GH URI
[cellular-automata.git]
/
polymorphism
/
001
/
src
/
polymorphism.ml
diff --git
a/polymorphism/001/src/polymorphism.ml
b/polymorphism/001/src/polymorphism.ml
index
0444595
..
c2f0c3e
100644
(file)
--- a/
polymorphism/001/src/polymorphism.ml
+++ b/
polymorphism/001/src/polymorphism.ml
@@
-51,7
+51,7
@@
sig
type 'a t
type 'a t
- val
creat
e : rs:int -> ks:int -> 'a -> 'a t
+ val
mak
e : rs:int -> ks:int -> 'a -> 'a t
val get_neighbors : 'a t -> Point.t -> 'a list
val get_neighbors : 'a t -> Point.t -> 'a list
@@
-100,7
+100,7
@@
struct
type 'a t = 'a array array
type 'a t = 'a array array
- let
creat
e ~rs ~ks x =
+ let
mak
e ~rs ~ks x =
Array.make_matrix ~dimx:rs ~dimy:ks x
let iter t ~f =
Array.make_matrix ~dimx:rs ~dimy:ks x
let iter t ~f =
@@
-143,7
+143,7
@@
struct
let neighborhood t point =
List.map Direction.all ~f:Direction.to_offset
let neighborhood t point =
List.map Direction.all ~f:Direction.to_offset
- |> List.map ~f:(
fun offset_point -> Point.(point + offset_point)
)
+ |> List.map ~f:(
Point.(+) point
)
|> List.filter ~f:(is_within_bounds t)
let get_neighbors t point =
|> List.filter ~f:(is_within_bounds t)
let get_neighbors t point =
@@
-155,7
+155,7
@@
module PhenoType :
sig
type t
sig
type t
- val
creat
e : char -> Terminal.color option -> t
+ val
mak
e : char -> Terminal.color option -> t
val to_string : t -> string
end =
val to_string : t -> string
end =
@@
-164,7
+164,7
@@
struct
; character : char
}
; character : char
}
- let
creat
e character color =
+ let
mak
e character color =
{color; character}
let to_string = function
{color; character}
let to_string = function
@@
-195,7
+195,7
@@
end
module type RULE =
sig
module type RULE =
sig
- val
create
: unit -> Cell.t
+ val
init
: unit -> Cell.t
val transition : self:Cell.State.t
-> neighbors:Cell.State.t list
val transition : self:Cell.State.t
-> neighbors:Cell.State.t list
@@
-209,9
+209,9
@@
struct
sig
type t = D | A
sig
type t = D | A
- val
of_int : in
t -> t
+ val
random : uni
t -> t
- val
to_int : t -> int
+ val
is_alive : t -> bool
val to_cell : t -> Cell.t
val to_cell : t -> Cell.t
@@
-222,18
+222,19
@@
struct
struct
type t = D | A
struct
type t = D | A
- let of_int = function
+ let random () =
+ match Random.int 2 with
| 0 -> D
| 1 -> A
| _ -> assert false
| 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
let to_pheno = function
- | D -> PhenoType.
creat
e ' ' None
- | A -> PhenoType.
creat
e 'o' (Some `white)
+ | D -> PhenoType.
mak
e ' ' None
+ | A -> PhenoType.
mak
e 'o' (Some `white)
let of_cell_state = function
| Cell.State.Dead -> D
let of_cell_state = function
| Cell.State.Dead -> D
@@
-260,13
+261,13
@@
struct
| D -> D
end
| D -> D
end
- let
create ()
=
-
Random.int 2 |> State.of_int |>
State.to_cell
+ let
init
=
+
State.random |-
State.to_cell
let count_of_live =
let count_of_live =
- List.map
~f:State.of_cell_state
- |- List.
map ~f:State.to_int
- |- List.
fold_left ~f:(+) ~init:0
+ List.map ~f:State.of_cell_state
+ |- List.
filter ~f:State.is_alive
+ |- List.
length
let transition ~self ~neighbors =
self |> State.of_cell_state
let transition ~self ~neighbors =
self |> State.of_cell_state
@@
-283,9
+284,7
@@
struct
val is_burning : t -> bool
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
val to_cell : t -> Cell.t
@@
-301,21
+300,17
@@
struct
| T -> false
| B -> true
| T -> false
| B -> true
- let of_int = function
+ let random () =
+ match Random.int 3 with
| 0 -> E
| 1 -> T
| 2 -> B
| _ -> assert false
| 0 -> E
| 1 -> T
| 2 -> B
| _ -> assert false
- let to_int = function
- | E -> 0
- | T -> 1
- | B -> 2
-
let to_pheno = function
let to_pheno = function
- | E -> PhenoType.
creat
e ' ' None
- | T -> PhenoType.
creat
e 'T' (Some `green)
- | B -> PhenoType.
creat
e '#' (Some `red)
+ | E -> PhenoType.
mak
e ' ' None
+ | T -> PhenoType.
mak
e 'T' (Some `green)
+ | B -> PhenoType.
mak
e '#' (Some `red)
let of_cell_state = function
| Cell.State.Dead -> E
let of_cell_state = function
| Cell.State.Dead -> E
@@
-349,14
+344,13
@@
struct
| B, _ -> E
end
| B, _ -> E
end
- let
create ()
=
-
Random.int 3 |> State.of_int |>
State.to_cell
+ let
init
=
+
State.random |-
State.to_cell
let count_of_burning =
let count_of_burning =
- List.map ~f:State.of_cell_state
- |- List.filter ~f:State.is_burning
- |- List.map ~f:State.to_int
- |- List.fold_left ~f:(+) ~init:0
+ List.map ~f:State.of_cell_state
+ |- List.filter ~f:State.is_burning
+ |- List.length
let transition ~self ~neighbors =
self |> State.of_cell_state
let transition ~self ~neighbors =
self |> State.of_cell_state
@@
-369,7
+363,7
@@
module Automaton :
sig
type t
sig
type t
- val
creat
e : rows:int
+ val
mak
e : rows:int
-> columns:int
-> interval:float
-> rules: (module RULE) list
-> columns:int
-> interval:float
-> rules: (module RULE) list
@@
-387,17
+381,17
@@
struct
; bar : string
}
; bar : string
}
- let
creat
e ~rows:rs ~columns:ks ~interval ~rules =
+ let
mak
e ~rows:rs ~columns:ks ~interval ~rules =
let n = List.length rules in
let init () =
let rule = List.nth_exn rules (Random.int n) in
let module Rule = (val rule : RULE) in
{ rule
let n = List.length rules in
let init () =
let rule = List.nth_exn rules (Random.int n) in
let module Rule = (val rule : RULE) in
{ rule
- ; data = Rule.
create
()
+ ; data = Rule.
init
()
}
in
Terminal.clear ();
}
in
Terminal.clear ();
- { grid = Matrix.map ~f:init (Matrix.
creat
e ~rs ~ks ())
+ { grid = Matrix.map ~f:init (Matrix.
mak
e ~rs ~ks ())
; interval = Time.Span.of_float interval
; bar = String.make ks '-'
}
; interval = Time.Span.of_float interval
; bar = String.make ks '-'
}
@@
-442,7
+436,7
@@
let main interval () =
; (module ForestFire : RULE)
]
in
; (module ForestFire : RULE)
]
in
- Automaton.loop (Automaton.
creat
e ~rows:(rows - 3) ~columns ~interval ~rules)
+ Automaton.loop (Automaton.
mak
e ~rows:(rows - 3) ~columns ~interval ~rules)
let spec =
let spec =
This page took
0.040984 seconds
and
4
git commands to generate.