diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-18 19:16:22 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-18 19:16:22 +0200 |
commit | 004d49dc5fc2a38aa1485dcd799dfe7cfd33902e (patch) | |
tree | 00705e441210c447c9224cae6015c6c6995ecf55 /examples/rule110.bdl | |
parent | b9a80d8bbc568ae8e995fde0ea1710359ab4ab1c (diff) | |
download | bdl-004d49dc5fc2a38aa1485dcd799dfe7cfd33902e.tar.gz bdl-004d49dc5fc2a38aa1485dcd799dfe7cfd33902e.zip |
Add rule110 to the examples
Diffstat (limited to 'examples/rule110.bdl')
-rw-r--r-- | examples/rule110.bdl | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/rule110.bdl b/examples/rule110.bdl new file mode 100644 index 0000000..abc89a9 --- /dev/null +++ b/examples/rule110.bdl | |||
@@ -0,0 +1,47 @@ | |||
1 | (def sequence (list 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1)) | ||
2 | |||
3 | (fun reverse (ls) | ||
4 | (fun rev-acc (ls acc) | ||
5 | (if (nil? ls) | ||
6 | acc | ||
7 | (rev-acc (cdr ls) (cons (car ls) acc)))) | ||
8 | (rev-acc ls '())) | ||
9 | |||
10 | (fun print-line (seq) | ||
11 | (if (or (nil? seq) (= 0 (car seq))) | ||
12 | (print " ") | ||
13 | (print "🖤")) | ||
14 | (if (not (nil? seq)) (print-line (cdr seq)))) | ||
15 | |||
16 | (fun rule-110 (seq n) | ||
17 | (print-line seq) | ||
18 | (newline) | ||
19 | (fun new-generation (lst seq) | ||
20 | (def a (if (nil? seq) 0 (car seq))) | ||
21 | (def b (if (or (nil? seq) | ||
22 | (nil? (cdr seq))) | ||
23 | 0 | ||
24 | (car (cdr seq)))) | ||
25 | (def c (if (or (nil? seq) | ||
26 | (nil? (cdr seq)) | ||
27 | (nil? (cdr (cdr seq)))) | ||
28 | 0 | ||
29 | (car (cdr (cdr seq))))) | ||
30 | (def number (+ (* a 2 2) (* b 2) c)) | ||
31 | (def cell (cond ((= number 0) 0) | ||
32 | ((= number 1) 1) | ||
33 | ((= number 2) 1) | ||
34 | ((= number 3) 1) | ||
35 | ((= number 4) 0) | ||
36 | ((= number 5) 1) | ||
37 | ((= number 6) 1) | ||
38 | ((= number 7) 0))) | ||
39 | (if (nil? (cdr seq)) | ||
40 | lst | ||
41 | (new-generation (cons cell lst) (cdr seq)))) | ||
42 | (def seq (cons 0 (reverse (new-generation '() seq)))) | ||
43 | (if (= n 0) | ||
44 | () | ||
45 | (rule-110 seq (- n 1)))) | ||
46 | |||
47 | (rule-110 sequence 25) | ||