From a96d162f649704df5d9b567158366015cbe3172c Mon Sep 17 00:00:00 2001
From: Jan Tuomi <jans.tuomi@gmail.com>
Date: Sat, 5 Feb 2022 16:48:16 +0200
Subject: Get basic stuff working

---
 src/Tutorial.tsx | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
 create mode 100644 src/Tutorial.tsx

(limited to 'src/Tutorial.tsx')

diff --git a/src/Tutorial.tsx b/src/Tutorial.tsx
new file mode 100644
index 0000000..917142b
--- /dev/null
+++ b/src/Tutorial.tsx
@@ -0,0 +1,37 @@
+import { useState } from "react"
+
+const Tutorial = () => {
+  const [collapsed, setCollapsed] = useState(true)
+
+  if (collapsed) {
+    return <button onClick={() => setCollapsed(false)}>SLAM tutorial ▼</button>
+  }
+
+  return (
+    <>
+      <button onClick={() => setCollapsed(true)}>SLAM tutorial ▲</button>
+
+      <h3>
+        <strong>SLAM</strong> is a procedural, stack-based programming language
+        inspired by Forth and Lisp.
+      </h3>
+
+      <p>
+        In the core of every SLAM program, there is an implied, global stack of
+        strongly and dynamically typed values. A SLAM program consists of a sequence
+        of <i>words</i> that when evaluated, can consume and produce values from/to
+        the stack.
+      </p>
+
+      <p>
+        <i>Phrases</i>, roughly equal to Lisp&apos;s quoted S-expressions, are a sequence
+        of words that are not immediately evaluated when encountered, but instead put on the stack for later
+        manipulation. Phrases can be used to implement strings or homogenous list structures. Phrases
+        are also the core of conditional expressions, where branches of code are only evaluated
+        when a condition is met.
+      </p>
+    </>
+  )
+}
+
+export default Tutorial
\ No newline at end of file
-- 
cgit v1.3

