From 74da83ca988395593fbed6faec3733aa5625421d Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 22 Oct 2020 14:36:43 -0400 Subject: Add infoboxes to introduce glyphs in tutorials --- docs/tutorial/list.html | 101 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) (limited to 'docs/tutorial/list.html') diff --git a/docs/tutorial/list.html b/docs/tutorial/list.html index 3a389d42..deae0f11 100644 --- a/docs/tutorial/list.html +++ b/docs/tutorial/list.html @@ -18,6 +18,34 @@

There are three kinds of list notation in BQN. Every one has a subject role, even though expressions used inside it might have other roles. First, a string is a list of characters, and is written by placing those characters in double quotes.

"Text!"
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
"String
\(Start list
\)End list
\;Separator
,Separator
+

Only one character needs to be escaped to place it in a string: the double quote, which is escaped by writing it twice. Any other character, including a newline, can be placed directly in a string.

Second, list notation uses angle brackets ⟨⟩. The elements in the list are kept apart with one of the three separator characters: ,, , and newline. Anything can be used as an element, even a function, or a modifier like . Here's a list containing a number, a 2-modifier, a string, and a non-string list:

 π, , "element"  'l',1,5,'t' 
@@ -32,6 +60,19 @@
   "lines"
 
 
+ + + + + + + + + + + +
#Comment
\ Strand
+

Finally, strand notation is a shortcut for simple lists like a few numbers. It's written with the ligature , which has a higher precedence than either functions or operators. A sequence of values joined with ligatures becomes a list, so that for example the following two expressions are equivalent:

2,+,-
 2+-
@@ -92,6 +133,27 @@
 ⟨ ⟨ 11 12 ⟩ ⟨ 23 33 ⟩ ⟩
 

Some list functions

+ + + + + + + + + + + + + + + + + + + +
\.SoloCouple
\,Join To
\qReverseRotate
+

Let's introduce a few primitives to work with lists.

Make one or two atom arguments into a list with , pronounced Solo in the one-argument case and Couple in the two-argument case. This might not seem to merit a symbol but there's more to come. Don't call it on lists and ponder the results, igniting a hunger for ever more dimensions.

↗️
     4
@@ -122,6 +184,25 @@
 "abcde"
 

…and modifiers

+ + + + + + + + + + + + + + + + + +
¨\1Each
´\5Fold
\,JoinJoin To
+

The 1-modifier Each (¨) applies its operand to every element of a list argument: it's the same as map in a functional programming language. With two list arguments (which have to have the same length), Each pairs the corresponding elements from each, a bit like a zip function. If one argument is a list and one's an atom, the atom is reused every time instead.

↗️
    ¨ "abcd""ABCDEF""01"
 ⟨ "dcba" "FEDCBA" "10" ⟩
@@ -156,6 +237,21 @@
 

Example: base decoding

Some people like to imagine that robots or other techno-beings speak entirely in binary-encoded ASCII, like for instance "01001110 01100101 01110010 01100100 00100001". This is dumb for a lot of reasons, and the encoded text probably just says something inane, but you're a slave to curiosity and can't ignore it. Are one and a half tutorials of BQN enough to clear your conscience?

+ + + + + + + + + + + + + +
\dRange
\hBind?
+

Almost. It's really close. There are just two things missing, so I'll cover those and can we agree one and three-quarters is pretty good? First is Range (), which is called on a number to give all the natural numbers less than it:

↗️
     8
 ⟨ 0 1 2 3 4 5 6 7 ⟩
@@ -275,6 +371,11 @@ ERROR
Rotate + + +Range + + ¨ Each Each -- cgit v1.2.3