ref: 78873542e74f63d289a1a44ead0dd143a9b11fcf
parent: 6a49bdd014794981f99ed32969b3dac2db78e981
author: seh <henesy.dev@gmail.com>
date: Sun Mar 3 19:52:38 EST 2019
add example and frame for arrays ex
--- /dev/null
+++ b/Arrays/README.md
@@ -1,0 +1,69 @@
+# Arrays
+
+Arrays in Limbo are dynamic and indexed by 0. They can be initialized providing a size, or declared and initialized in two separate statements if no size is specified.
+
+Disclaimer: I don't like this example very much, but I'm not sure how to shore it up. The less on here is to use lists.
+
+## Source
+
+### arrays.b:20,30
+
+
+
+### arrays.b:32,44
+
+
+
+### arrays.b:46,57
+
+
+
+### arrays.b:59,67
+
+
+
+### arrays.b:69,84
+
+
+
+### arrays.b:86,94
+
+
+
+### arrays.b:96,122
+
+
+
+## Demo
+
+ ; limbo arrays.b
+ ; arrays
+ Len nums: 0
+ Len nums: 6
+ [ 0 2 4 6 8 10]
+
+ Len arr: 12
+ [ b a b y d u c k s ! !]
+
+ Len dbl: 24
+ [ b b a a b b y y d d u u c c k k s s ! ! ! !]
+
+ Len chars: 6
+ [ a b c d e f]
+
+ Len nest: 0
+ Len nest: 4
+ Lens: [ 2 4 8 16]
+
+ Len buf: 10
+ [ 3 3 3 3 3 3 3 3 3 3]
+
+ Len two: 4
+ Lens: [ 1 0 1 0]
+ [ (ducks quack) (nil, nil) (inferno os) (nil, nil)]
+ ;
+
+## Exercises
+
+- Play with the widths of different arrays, what happens?
+- What can you initialize with the `* =>` operator, what can't you?
--- /dev/null
+++ b/Arrays/arrays.b
@@ -1,0 +1,125 @@
+implement Arrays;
+
+include "sys.m";
+include "draw.m";
+
+sys: Sys;
+print: import sys;
+
+Arrays: module {+ init: fn(nil: ref Draw->Context, nil: list of string);
+};
+
+nums: array of int;
+
+width: int = 6;
+
+init(nil: ref Draw->Context, nil: list of string) {+ sys = load Sys Sys->PATH;
+
+ # Nums
+ print("Len nums: %d\n", len nums);+
+ nums = array[width] of int;
+
+ print("Len nums: %d\n", len nums);+
+ print("[");+ for(i := 0; i < width; i++)
+ print(" %d", nums[i] = i << 1);+ print("]\n\n");+
+ # Arr
+ arr := array[12] of byte;
+ arrstr := "baby ducks!!";
+
+ for(i = 0; i < len arrstr; i++)
+ arr[i] = byte arrstr[i];
+
+ print("Len arr: %d\n", len arr);+
+ print("[");+ for(i = 0; i < len arr; i++)
+ print(" %c", int arr[i]);+ print("]\n\n");+
+ # Dbl
+ dbl := array[len arr *2] of byte;
+
+ for(i = 0; i < len arr; i++)
+ dbl[i*2] = dbl[i*2+1] = arr[i];
+
+ print("Len dbl: %d\n", len dbl);+
+ print("[");+ for(i = 0; i < len dbl; i++)
+ print(" %c", int dbl[i]);+ print("]\n\n");+
+ # Chars
+ chars := array[] of {"a", "b", "c", "d", "e", "f"};+
+ print("Len chars: %d\n", len chars);+
+ print("[");+ for(i = 0; i < len chars; i++)
+ print(" %s", chars[i]);+ print("]\n\n");+
+ # Nest
+ nest: array of array of string;
+
+ print("Len nest: %d\n", len nest);+
+ nest = array[4] of array of string;
+
+ print("Len nest: %d\n", len nest);+
+ for(i = 0; i < len nest; i++)
+ nest[i] = array[2 << i] of string;
+
+ print("Lens: [");+ for(i = 0; i < len nest; i++)
+ print(" %d", len nest[i]);+ print("]\n\n");+
+ # Buf
+ buf := array[10] of {* => byte 3};+
+ print("Len buf: %d\n", len buf);+
+ print("[");+ for(i = 0; i < len buf; i++)
+ print(" %d", int buf[i]);+ print("]\n\n");+
+ # Two
+ two := array[4] of list of (string, string);
+
+ #two = array[4] of list of (string, string);
+
+ two[0] = ("ducks", "quack") :: two[0];+
+ two[2] = ("inferno", "os") :: two[2];+
+ print("Len two: %d\n", len two);+
+ print("Lens: [");+ for(i = 0; i < len two; i++)
+ print(" %d", len two[i]);+ print("]\n");+
+ print("[");+ for(i = 0; i < len two; i++) {+ if(two[i] == nil) {+ print(" (nil, nil)");+ continue;
+ }
+
+ (s0, s1) := hd two[i];
+ print(" (%s %s)", s0, s1);+ }
+ print("]\n");+
+ exit;
+}
--
⑨