aboutsummaryrefslogtreecommitdiffstats
path: root/src/Tutorial.tsx
blob: 917142bca6abaea25a13ef7282ec410cceb684ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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