wisp
 
(Arne Babenhauserheide)
2014-05-02: started a d20 world in scheme, because I currently have no wisp on

started a d20 world in scheme, because I currently have no wisp on this machine.

diff --git a/examples/d20world.w b/examples/d20world.w
new file mode 100644
--- /dev/null
+++ b/examples/d20world.w
@@ -0,0 +1,72 @@
+#!/home/arne/wisp/wisp-multiline.sh 
+; !#
+
+; A world projected on a d20 (20-sided die)
+
+(define world (make-vector 20))
+(define neighbors (make-vector 20))
+; count from the top
+(define neighbors-helper
+; Contains the numbers instead of the indexes, to make it easier for
+; me to think about them.
+; 
+;   7       8
+;    3    4  
+;       1        
+;   6   2   9
+;     5   10
+; 
+;    14       13
+;     18    17
+;        20        
+;   15   19   12
+;     16    11
+; 
+  '((1 2 3 4)
+    (2 1 5 10)
+    (3 1 6 7)
+    (4 1 8 9)
+    (5 2 6 14)
+    (6 3 5 15)
+    (7 3 8 16)
+    (8 4 7 11)
+    (9 4 10 12)
+    (10 1 9 13)
+    (20 19 18 17)
+    (19 20 16 11)
+    (18 20 15 14)
+    (17 20 13 12)
+    (16 19 17 7)
+    (15 18 16 6)
+    (14 18 13 5)
+    (13 17 14 10)
+    (12 17 11 9)
+    (11 19 12 8)))
+
+(let loop ((relationships neighbors-helper))
+  (cond 
+   ((null? relationships)
+    neighbors)
+   (else
+    (let* ((cur (car relationships))
+           (idx (1- (car cur)))
+           (vec (cdr cur)))
+      (vector-set! world idx idx)
+      (vector-set! neighbors idx (make-vector 3))
+      (let setidx ((idxtoset '(0 1 2)))
+        (cond 
+         ((null? idxtoset)
+          #t)
+         (else
+          (vector-set!
+           (vector-ref neighbors idx)
+           (car idxtoset)
+           (1- (list-ref vec (car idxtoset))))
+          (setidx (cdr idxtoset)))))
+      (loop (cdr relationships))))))
+(display world)
+(newline)
+(display neighbors)
+(newline)
+(display (vector-ref world 0))
+(newline)