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