shithub: limbobyexample

Download patch

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;
+}