shithub: limbobyexample

Download patch

ref: a609ffb20226eba3d4dc628d7b4d284eddd1c114
parent: 800edd82a0a1c63a1a08fa23502a280dbb7d9937
author: seh <henesy.dev@gmail.com>
date: Sun Mar 17 21:25:33 EDT 2019

add slices example

--- a/README.md
+++ b/README.md
@@ -35,6 +35,7 @@
 - [If Else](./If-Else)
 - [Switch Case](./Switch)
 - [Arrays](./Arrays)
+- [Slices](./Slices)
 - [Functions](./Functions)
 - [Function References](./Function-Refs)
 - [Generics, Picks, and Interfaces (kind of)](./Generics)
--- /dev/null
+++ b/Slices/README.md
@@ -1,0 +1,32 @@
+# Slices
+
+Limbo supports slicing on arbitrary array types, including strings, as strings are arrays of bytes. 
+
+## Source
+
+### slices.b:19,22
+
+This section shows slicing from the beginning of an array to the index up to before the variable `n`.
+
+### slices.b:24,25
+
+This section shows slicing from the index 4 to the end of the array.
+
+### slices.b:27,28
+
+This section shows several slicing operations. First `c` is created as the slice of `str` from index 2 through the index prior to the final index of `str`. The printout is then a string version of the slice of `c` from index 4 through the 7th index. 
+
+## Demo
+
+	; limbo slices.b
+	; slices
+	little_baby_ducks
+	lit
+	le_baby_ducks
+	_bab
+	; 
+
+## Exercises
+
+- What happens if you try to slice an empty string, `""`?
+- Can you slice in the format `[:n:]`?
--- /dev/null
+++ b/Slices/slices.b
@@ -1,0 +1,31 @@
+implement Slices;
+
+include "sys.m";
+include "draw.m";
+
+sys: Sys;
+print: import sys;
+
+Slices: module {
+	init: fn(nil: ref Draw->Context, nil: list of string);
+};
+
+init(nil: ref Draw->Context, nil: list of string) {
+	sys = load Sys Sys->PATH;
+
+	str := "little_baby_ducks";
+	print("%s\n", str);
+
+	n := 3;
+
+	a := str[:n];
+	print("%s\n", a);
+
+	b := str[4:];
+	print("%s\n", b);
+
+	c := array of byte str[2:len str -1];
+	print("%s\n", string c[4:8]);
+
+	exit;
+}