summaryrefslogtreecommitdiff
path: root/Blog/Components/Pages/Concat.razor
diff options
context:
space:
mode:
Diffstat (limited to 'Blog/Components/Pages/Concat.razor')
-rw-r--r--Blog/Components/Pages/Concat.razor138
1 files changed, 138 insertions, 0 deletions
diff --git a/Blog/Components/Pages/Concat.razor b/Blog/Components/Pages/Concat.razor
new file mode 100644
index 0000000..856d4e0
--- /dev/null
+++ b/Blog/Components/Pages/Concat.razor
@@ -0,0 +1,138 @@
1@page "/Concat"
2<PageTitle>Concatenator</PageTitle>
3<PageScript Src="./Components/Pages/Concat.razor.js"/>
4<main>
5 <p>A "concatenative language"</p>
6 <form id="form">
7 <textarea id="input" placeholder="1 2 +" rows="5"></textarea>
8 <input type="submit" value="Run program">
9 </form>
10 <div>
11 <div id="log"></div>
12 </div>
13
14 <fieldset class="docs">
15 <legend>Predefined operations</legend>
16 <details>
17 <summary>dup</summary>
18 <p>Duplicates the top value on the stack</p>
19 <div class="flex-spread">
20 <span>[1, 2, 3]</span>
21 <span>dup</span>
22 </div>
23 <div class="flex-spread">
24 <span>[1, 1, 2, 3]</span>
25 <span></span>
26 </div>
27 </details>
28
29 <details>
30 <summary>drop</summary>
31 <p>Drops the top value on the stack</p>
32 <div class="flex-spread">
33 <span>[1, 2, 3]</span>
34 <span>drop</span>
35 </div>
36 <div class="flex-spread">
37 <span>[2, 3]</span>
38 <span></span>
39 </div>
40 </details>
41
42 <details>
43 <summary>swap</summary>
44 <p>Swaps the top two values on the stack</p>
45 <div class="flex-spread">
46 <span>[1, 2, 3]</span>
47 <span>swap</span>
48 </div>
49 <div class="flex-spread">
50 <span>[2, 1, 3]</span>
51 <span></span>
52 </div>
53 </details>
54
55 <details>
56 <summary>skip</summary>
57 <p>Skips forward in the program by the amount on the top of the stack.
58 If the value on the top of the stack is 0 or negative,
59 the value is dropped and the program does not skip ahead.
60 </p>
61 <div class="flex-spread">
62 <span>[1, 2, 3]</span>
63 <span>skip drop dup</span>
64 </div>
65 <div class="flex-spread">
66 <span>[2, 3]</span>
67 <span>dup</span>
68 </div>
69 <div class="flex-spread">
70 <span>[2, 2, 3]</span>
71 <span></span>
72 </div>
73 Or
74 <div class="flex-spread">
75 <span>[-1, 2, 3]</span>
76 <span>skip drop dup</span>
77 </div>
78 <div class="flex-spread">
79 <span>[2, 3]</span>
80 <span>drop dup</span>
81 </div>
82 <div class="flex-spread">
83 <span>[3]</span>
84 <span>dup</span>
85 </div>
86 <div class="flex-spread">
87 <span>[3, 3]</span>
88 <span></span>
89 </div>
90 </details>
91
92 <details>
93 <summary>: word ... ;</summary>
94 <p>Creates a new definition.</p>
95 <p>Example: ": double 2 * ;" defines a new word called double. Any subsequent mention of double will
96 replace the word with its definition.</p>
97 <div class="flex-spread">
98 <span>[]</span>
99 <span>: double 2 * ; 3 double</span>
100 </div>
101 <div class="flex-spread">
102 <span>[]</span>
103 <span>3 double</span>
104 </div>
105 <div class="flex-spread">
106 <span>[3]</span>
107 <span>double</span>
108 </div>
109 <div class="flex-spread">
110 <span>[3]</span>
111 <span>2 *</span>
112 </div>
113 <div class="flex-spread">
114 <span>[2, 3]</span>
115 <span>*</span>
116 </div>
117 <div class="flex-spread">
118 <span>[6] &lt;==</span>
119 <span></span>
120 </div>
121 </details>
122 </fieldset>
123 <fieldset class="docs">
124 <legend>Example programs</legend>
125 <details>
126 <summary>Factorial</summary>
127 <NavLink
128 href="/concat?in=FwAgxg9grgdgLgUwE4lQEygBxAJhAZwHcBDbAWhAG4AoUAQlRA2wEYQLJZEV8BrAS2wMAVFWoB2EHWpA">
129 Replace program
130 </NavLink>
131 <pre>
132 : counter dup 2 swap - ;
133 : ! dup 1 - counter skip ! * ;
134 7 !
135 </pre>
136 </details>
137 </fieldset>
138</main> \ No newline at end of file