-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
247 lines (244 loc) · 132 KB
/
Copy pathindex.html
File metadata and controls
247 lines (244 loc) · 132 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-compute-engine/reference-control-structures" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
<title data-rh="true">Control Structures · MathLive</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://mathlive.io/img/social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://mathlive.io/img/social-card.jpg"><meta data-rh="true" property="og:url" content="https://mathlive.io/compute-engine/reference/control-structures/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Control Structures · MathLive"><meta data-rh="true" name="description" content="Control Structures define how a sequence of expressions is evaluated."><meta data-rh="true" property="og:description" content="Control Structures define how a sequence of expressions is evaluated."><link data-rh="true" rel="icon" href="/img/logo.webp"><link data-rh="true" rel="canonical" href="https://mathlive.io/compute-engine/reference/control-structures/"><link data-rh="true" rel="alternate" href="https://mathlive.io/compute-engine/reference/control-structures/" hreflang="en"><link data-rh="true" rel="alternate" href="https://mathlive.io/compute-engine/reference/control-structures/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://Q23Y5RN3UQ-dsn.algolia.net" crossorigin="anonymous"><link data-rh="true" rel="alternate" type="text/markdown" href="/compute-engine/reference/control-structures.md"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Control Structures","item":"https://mathlive.io/compute-engine/reference/control-structures/"}]}</script><link rel="search" type="application/opensearchdescription+xml" title="MathLive" href="/opensearch.xml">
<link rel="stylesheet" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.css">
<script>!function(){var e,t;window.moduleMap||(window.moduleMap={}),window.moduleMap={...window.moduleMap,mathlive:"https://esm.run/mathlive","compute-engine":"https://esm.run/@cortex-js/compute-engine","@cortex-js/compute-engine":"https://esm.run/@cortex-js/compute-engine"},(e=["https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/codemirror.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/javascript/javascript.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/xml/xml.min.js","https://unpkg.com/@cortex-js/compute-engine","https://cdn.jsdelivr.net/npm/mathlive","https://cdn.jsdelivr.net/npm/@ui-js/code-playground@1.13.2/dist/code-playground.min.js@module"]).forEach((o,n)=>{const m=o.endsWith("@module"),c="script"+function(e,t=0){let o=3735928559^t,n=1103547991^t;for(let t=0;t<e.length;t++){const m=e.charCodeAt(t);o=Math.imul(o^m,2654435761),n=Math.imul(n^m,1597334677)}return o=Math.imul(o^o>>>16,2246822507),o^=Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(o^o>>>13,3266489909),4294967296*(2097151&n)+(o>>>0)}(o=o.replace("@module","")).toString(36);if(document.getElementById(c))return;const d=document.createElement("script");m&&(d.type="module"),d.id=c,d.src=o,d.async=!1,t&&n===e.length-1&&(d.onload=t),document.head.appendChild(d)})}()</script>
<link rel="preconnect" href="https://rsms.me/">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" media="print" onload="this.media='all'">
<link rel="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Bold.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Main-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Math-Italic.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_AMS-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Size1-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="image" href="/img/hand-slugs.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-gears.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-cube2.jpg" fetchpriority="high"><link rel="stylesheet" href="/assets/css/styles.a0d89006.css">
<script src="/assets/js/runtime~main.b8cf4556.js" defer="defer"></script>
<script src="/assets/js/main.fd881ca3.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>document.documentElement.setAttribute("data-theme",window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.setAttribute("data-theme-choice","system"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/logo.webp"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="shared-header"><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--light_NVdE" height="42" width="42"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU" height="42" width="42"></div><b class="navbar__title text--truncate">MathLive</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/mathfield/">Mathfield</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/compute-engine/">Compute Engine</a><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link" icon="github">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav></div><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/mathfield/"><span class="categoryLinkLabel_W154">Mathfield</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/compute-engine/"><span class="categoryLinkLabel_W154">Compute Engine</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine/"><span class="linkLabel_WmDU">Introduction</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item flask-icon"><a class="menu__link" tabindex="0" href="/compute-engine/demo/"><span class="linkLabel_WmDU">Demo</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item changelog-icon"><a class="menu__link" tabindex="0" href="/compute-engine/changelog/"><span class="linkLabel_WmDU">Changelog</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/expressions/"><span class="linkLabel_WmDU">Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/evaluate/"><span class="linkLabel_WmDU">Evaluation of Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbolic-computing/"><span class="linkLabel_WmDU">Symbolic Computing</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/numeric-evaluation/"><span class="linkLabel_WmDU">Numeric Evaluation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/canonical-form/"><span class="linkLabel_WmDU">Canonical Form</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbols/"><span class="linkLabel_WmDU">Symbols</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/augmenting/"><span class="linkLabel_WmDU">Custom Functions and Symbols</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/latex-syntax/"><span class="linkLabel_WmDU">LaTeX Syntax</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/types/"><span class="linkLabel_WmDU">Types</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/units/"><span class="linkLabel_WmDU">Units and Quantities</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/simplify/"><span class="linkLabel_WmDU">Simplify</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/compiling/"><span class="linkLabel_WmDU">Compiling Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/python-target/"><span class="linkLabel_WmDU">Python/NumPy Target</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/assumptions/"><span class="linkLabel_WmDU">Assumptions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/patterns-and-rules/"><span class="linkLabel_WmDU">Patterns and Rules</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/identities/"><span class="linkLabel_WmDU">Extended Rules — The Identities Library</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/logic/"><span class="linkLabel_WmDU">Logic and First-Order Logic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/linear-algebra/"><span class="linkLabel_WmDU">Linear Algebra</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link" tabindex="0" href="/math-json/"><span class="linkLabel_WmDU">MathJSON Format</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link" tabindex="0" href="/compute-engine/api/"><span class="linkLabel_WmDU">API Reference</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine/standard-library/"><span class="linkLabel_WmDU">MathJSON Standard Library</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/arithmetic/"><span class="linkLabel_WmDU">Arithmetic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/calculus/"><span class="linkLabel_WmDU">Calculus</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/collections/"><span class="linkLabel_WmDU">Collections</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/colors/"><span class="linkLabel_WmDU">Colors</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/complex/"><span class="linkLabel_WmDU">Complex</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/compute-engine/reference/control-structures/"><span class="linkLabel_WmDU">Control Structures</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/core/"><span class="linkLabel_WmDU">Core</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/functions/"><span class="linkLabel_WmDU">Functions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/linear-algebra/"><span class="linkLabel_WmDU">Linear Algebra</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/logic/"><span class="linkLabel_WmDU">Logic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/sets/"><span class="linkLabel_WmDU">Sets</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/special-functions/"><span class="linkLabel_WmDU">Special Functions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/statistics/"><span class="linkLabel_WmDU">Statistics</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/combinatorics/"><span class="linkLabel_WmDU">Combinatorics</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/number-theory/"><span class="linkLabel_WmDU">Number Theory</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/strings/"><span class="linkLabel_WmDU">Strings and Text</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/trigonometry/"><span class="linkLabel_WmDU">Trigonometry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/units/"><span class="linkLabel_WmDU">Units and Quantities</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link"><span class="categoryLinkLabel_W154">Tutorials</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item tutorial-icon"><a class="menu__link" tabindex="0" href="/tutorials/simple-quiz/"><span class="linkLabel_WmDU">Simple Quiz</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/about/"><span class="categoryLinkLabel_W154">Additional Resources</span></a></div></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Compute Engine</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Control Structures</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Control Structures</h1></header><div class="intro_b9yo"><p>Control Structures define how a sequence of expressions is evaluated.</p></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no"></a></h2>
<p>The flow of a program is controlled by control structures. Control structures
are expressions that define how a sequence of expressions is evaluated.</p>
<p>There are three kind of control structures:</p>
<ul>
<li class=""><strong>Sequential</strong>: <code>Block</code>, the most common where expressions are evaluated one
after the other</li>
<li class=""><strong>Conditional</strong> <code>If</code>, <code>Which</code> or <code>Match</code>, where expressions are evaluated
depending on the value of a condition or the structure of a value</li>
<li class=""><strong>Iterative</strong> <code>Loop</code> or <code>FixedPoint</code>, where expressions are evaluated
repeatedly</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sequential-control-structure">Sequential Control Structure<a href="#sequential-control-structure" class="hash-link" aria-label="Direct link to Sequential Control Structure" title="Direct link to Sequential Control Structure" translate="no"></a></h2>
<section id="Block" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Block</b>(<em>expr-1</em>, ...<em>expr-n</em>)</p><p>A <code>["Block"]</code> expression is a sequence of expressions that are evaluated
sequentially.</p><p>A new scope is created for the <code>["Block"]</code> expression. The scope is destroyed
when the <code>["Block"]</code> expression is finished evaluating. This means that
variables defined in the <code>["Block"]</code> expression are not accessible outside of
the <code>["Block"]</code> expression.</p><p>The value of the <code>["Block"]</code> expression is the value of the last expression
<code>expr-n</code>.</p><p>If one of the expression in the block is a <code>["Return"]</code> expression, a
<code>["Break"]</code> expression or a <code>["Continue"]</code> expression, no more expressions are
evaluated and the value of the <code>["Block"]</code> is this expression.</p><p><code>["Block"]</code> expressions can be nested as necessary. Scoping is lexical: a
nested scope — an inner <code>["Block"]</code>, an <code>["If"]</code> branch, or a <code>["Loop"]</code>
body — can read the enclosing block's variables, and assigning to a variable
declared in an enclosing block updates that binding. A <code>["Declare"]</code> in the
inner block instead introduces a new variable that shadows the outer one for
the duration of the inner block.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Block"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Assign"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"c"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">5</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Multiply"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"c"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 10</span><br></div></code></pre></div></div><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Block"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Declare"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"integer"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Assign"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Loop"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Block"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Not"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Less"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">5</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Break"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Assign"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"counter"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 5</span><br></div></code></pre></div></div></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conditional-control-structure">Conditional Control Structure<a href="#conditional-control-structure" class="hash-link" aria-label="Direct link to Conditional Control Structure" title="Direct link to Conditional Control Structure" translate="no"></a></h2>
<section id="If" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>If</b>(<em>condition</em>, <em>expr-1</em>)</p><p>If the value of <code>condition</code> is the symbol <code>True</code>, the value of the <code>["If"]</code>
expression is <code>expr-1</code>, otherwise <code>Nothing</code>.</p><p class="signature_CWyf"><b>If</b>(<em>condition</em>, <em>expr-1</em>, <em>expr-2</em>)</p><p>If the value of <code>condition</code> is the symbol <code>True</code>, the value of the <code>["If"]</code>
expression is <code>expr-1</code>, otherwise <code>expr-2</code>.</p><p>Here's an example of a function that returns the absolute value of a number:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Function"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Negate"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div><p><code>["If"]</code> expressions can be nested as necessary.</p></section>
<section id="Which" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Which</b>(<em>condition-1</em>, <em>expr-1</em>, ...<em>condition-n</em>,
<em>expr-n</em>)</p><p>The value of the <code>["Which"]</code> expression is the value of the first expression
<code>expr-n</code> for which the corresponding condition <code>condition-n</code> is <code>True</code>.</p><div class="latexWrapper_OyfQ"><div class="source_Stpb language-latex"><div class="line_GvIm"><span class="command_yVKk">\begin</span><span class="punctuation_YpjP">{</span><span>cases</span><span class="punctuation_YpjP">}</span><span> x </span><span class="punctuation_YpjP">&</span><span> </span><span class="command_yVKk">\text</span><span class="punctuation_YpjP">{</span><span>if </span><span class="punctuation_YpjP">}</span><span> x > 0 </span><span class="command_yVKk">\\</span><span> -x </span><span class="punctuation_YpjP">&</span><span> </span><span class="command_yVKk">\text</span><span class="punctuation_YpjP">{</span><span>if </span><span class="punctuation_YpjP">}</span><span> x < 0 </span><span class="command_yVKk">\\</span><span> 0 </span><span class="punctuation_YpjP">&</span><span> </span><span class="command_yVKk">\text</span><span class="punctuation_YpjP">{</span><span>otherwise</span><span class="punctuation_YpjP">}</span><span> </span><span class="command_yVKk">\end</span><span class="punctuation_YpjP">{</span><span>cases</span><span class="punctuation_YpjP">}</span><br></div></div><div class="display_sbg0">$$$\begin{cases} x & \text{if } x > 0 \\ -x & \text{if } x < 0 \\ 0 & \text{otherwise} \end{cases}$$</div></div><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Block"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Assign"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">-10</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Which"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Negate"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 10</span><br></div></code></pre></div></div><p>A <code>["Which"]</code> expression is equivalent to the following <code>["If"]</code> expression:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Equal"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> condition</span><span class="token number" style="color:var(--base-09)">-1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"True"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> expr</span><span class="token number" style="color:var(--base-09)">-1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Equal"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> condition</span><span class="token number" style="color:var(--base-09)">-2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"True"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> _expr</span><span class="token number" style="color:var(--base-09)">-2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> ... </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Equal"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> condition-n</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"True"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> expr-n</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Nothing"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div><p>A <code>["Which"]</code> expression is equivalent to a <code>switch</code> statement in JavaScript or
the <code>Which[]</code> function in Mathematica.</p></section>
<section id="When" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>When</b>(<em>expr</em>, <em>condition</em>)</p><p>Returns the value of <code>expr</code> when <code>condition</code> evaluates to <code>True</code>, and
<code>Undefined</code> when <code>condition</code> evaluates to <code>False</code>. When <code>condition</code> cannot
be determined, the expression holds unevaluated.</p><p><code>["When"]</code> is the AST head produced by <strong>restriction-brace</strong> syntax:
<code>expr\{cond\}</code> parses to <code>["When", expr, cond]</code>. It is also useful directly
for masking values where a predicate does not hold. The braces may be
separated from the base expression by spacing commands
(<code>(1-t)^2(1+2t)\ \{t\ge0\}\{t\le1\}</code> attaches both restrictions).</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"When"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Square"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Evaluates to x^2 when x > 0, Undefined otherwise.</span><br></div></code></pre></div></div><p><strong>Stacked restrictions canonicalize</strong> to a single <code>When</code> with an <code>And</code>
predicate:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"When"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"When"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Less"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">10</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Canonicalizes to:</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"When"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"And"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Less"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">10</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div><p>Downstream simplification, interval intersection, and compilation operate on
the canonical form, so source variants (stacked braces or a single brace
with <code>\wedge</code>) are interchangeable.</p><p>When compiled to JavaScript or GLSL, <code>When(e, cond)</code> emits a ternary
<code>(cond ? e : NaN)</code>. This makes <code>When</code> suitable for plot-domain masking.</p></section>
<section id="Match" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Match</b>(<em>subject</em>, <em>case-1</em>, ...<em>case-n</em>)</p><p>Structural pattern matching: the value of the <code>["Match"]</code> expression is the
value of the first case whose pattern matches the structure of <code>subject</code>
(and whose guard, if any, is <code>True</code>).</p><p>Each case is a <code>["MatchCase"]</code> expression:</p><ul>
<li class=""><code>["MatchCase", pattern, body]</code></li>
<li class=""><code>["MatchCase", pattern, guard, body]</code></li>
</ul><p>The <code>pattern</code> uses the same wildcards as
<a class="" href="/compute-engine/guides/patterns-and-rules/">patterns and rules</a>: <code>"_n"</code>
captures one value, <code>"__n"</code> a sequence, <code>"___n"</code> an optional sequence, and
<code>"_"</code> matches anything without capturing. The <code>guard</code> and <code>body</code> reference
captures by their <strong>bare name</strong> (<code>"n"</code> for <code>"_n"</code>).</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">4</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_a"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_b"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"a"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"b"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 7</span><br></div></code></pre></div></div><p>Unlike <code>["Which"]</code>, which evaluates boolean conditions and stays unevaluated
while a condition cannot be decided, <code>["Match"]</code> inspects the <strong>structure</strong>
of the subject and always selects a case: a symbolic subject that is not
structurally equal to a pattern falls through to the next case.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'zero'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'other'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "other" — x could be 0 semantically, but is not structurally 0</span><br></div></code></pre></div></div><p>In Epsil, the wildcard case may also be spelled <code>otherwise</code>:
<code>match x { 0 => "zero"; otherwise => "other" }</code>. It is a contextual synonym
for a bare <code>_</code> pattern — it lowers to the same <code>"_"</code> node, may take a guard
(<code>otherwise if c => …</code>), and binds nothing. Only the whole-pattern spelling
is special: inside a structured pattern, <code>otherwise</code> is an ordinary
identifier (and therefore a capture).</p><p>A guard must evaluate to <code>True</code> for the case to be selected; <code>False</code> or an
undecidable guard falls through to the next case:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">5</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"n"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'positive'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'other'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "positive"</span><br></div></code></pre></div></div><p>Two auxiliary heads may appear inside a pattern:</p><ul>
<li class=""><code>["Pin", expr]</code> matches the <strong>value</strong> of <code>expr</code>, evaluated when the match
is performed, rather than its structure. Use it to match against a
constant (<code>["Pin", "Pi"]</code>) or the current value of a variable.</li>
<li class=""><code>["Alternatives", p-1, ..., p-n]</code>, as a case's pattern, matches if any
alternative matches. The alternatives share the case's guard and body and
must not contain named captures.</li>
</ul><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Alternatives"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'small'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Pin"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'pi'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'big'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "small"</span><br></div></code></pre></div></div><p><strong>Range patterns</strong>. A two-operand <code>["Range", lo, hi]</code> at the <strong>top level</strong> of a
case's pattern — or of one of its <code>["Alternatives"]</code> — is an <strong>inclusive
numeric membership test</strong> rather than a structure to match: the case is
selected if the subject is a real number between <em>lo</em> and <em>hi</em>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">5</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Range"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">10</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'in range'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'out of range'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "in range"</span><br></div></code></pre></div></div><p>Both endpoints are included, and the endpoint comparisons use the engine's
tolerance. The bounds must be numeric literals; <code>Infinity</code> and <code>-Infinity</code>
are allowed, so <code>["Range", 0, {"num": "+Infinity"}]</code> means "any non-negative
number". A <code>Range</code> that is not a well-formed range pattern — a symbolic bound,
or a third <em>step</em> operand — is not a membership test and keeps its ordinary
structural meaning. (In Epsil, those spellings are reported as parse
diagnostics instead.)</p><p>A subject that is not a number falls through: a symbol (including a constant
such as <code>"Pi"</code>, which is not a <em>literal</em>), an operator expression, a string, a
collection, a complex number, and <code>NaN</code> all fail a range case.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Range"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">10</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'in range'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'not a number literal'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "not a number literal"</span><br></div></code></pre></div></div><p>The consequence is that a literal <code>Range</code> <strong>value</strong> can no longer be matched
<em>structurally</em> at the top level of a pattern. To compare a subject against a
<code>Range</code> value, use a pin — <code>["Pin", ["Range", 1, 10]]</code>, which compares values
and is not re-read as a membership test. A <code>Range</code> nested inside a <code>List</code>,
<code>Tuple</code> or <code>Dictionary</code> pattern also keeps its ordinary structural meaning.</p><p>In Epsil, a range pattern is written <code>lo..hi</code>:
<code>match n { 0..9 => "digit"; _ => "more" }</code>.</p><p><strong>Error subjects</strong>. <code>["Match"]</code> also decides when the subject is an
<a class="" href="/compute-engine/reference/core/#Error">error</a> — it is the construct for
rescuing a failed computation. Matching stays total, but an error is never
handed to a pattern that would pretend the failure has a shape: literal,
range, pin, and structural cases all fail against an error subject, and it
falls through to <code>"_"</code> or to a capture.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Ln"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'a'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'zero'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_a"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'a list'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'rescued'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "rescued"</span><br></div></code></pre></div></div><p>An explicit <code>["Error", ...]</code> pattern is the exception: it destructures the
error, binding its payload. This is the idiomatic rescue:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Ln"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'a'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Error"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_code"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"code"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'no error'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ ["ErrorCode", "'incompatible-type'", "'number'", "'string'"]</span><br></div></code></pre></div></div><p>A guard can inspect the subject with
<a class="" href="/compute-engine/reference/core/#IsError"><code>IsError</code></a> or
<a class="" href="/compute-engine/reference/core/#Type"><code>Type</code></a>:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Match"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Ln"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'a'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_v"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"IsError"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"v"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'failed'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"MatchCase"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"'ok'"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "failed"</span><br></div></code></pre></div></div><p>The <code>["ErrorTrace"]</code> breadcrumb a bubbled error carries is stripped before
matching, so a pattern only ever sees the error's code and context.</p><p>If no case matches, the value of the expression is
<code>["Error", "'match-no-case'", subject]</code> — an ordinary error value.</p><p>Matches over constant cases are dispatched in constant time, and fixed-shape
<code>List</code>/<code>Tuple</code>/<code>Dictionary</code> patterns are matched without invoking the
general pattern matcher. When compiled to JavaScript, constant cases emit a
comparison chain or a <code>switch</code> statement, and fixed-shape destructuring is
supported; symbolic patterns (such as <code>["Add", "_a", 1]</code>) cannot be
compiled and fail with an error rather than producing incorrect code.</p><p>In Epsil, <code>["Match"]</code> is written with the <code>match</code> keyword:
<code>match x { 0 => "zero"; 1 | 2 | == Pi => "small or pi"; _ => "other" }</code>.</p></section>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="loops">Loops<a href="#loops" class="hash-link" aria-label="Direct link to Loops" title="Direct link to Loops" translate="no"></a></h2>
<section id="Loop" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Loop</b>(<em>body</em>)</p><p>Repeatedly evaluate <code>body</code> until the value of <code>body</code> is a <code>["Break"]</code> expression,
or a <code>["Return"]</code> expression.</p><ul>
<li class=""><code>["Break"]</code> exits the loop immediately. The value of the <code>["Loop"]</code> expression
is the value of the <code>["Break"]</code> expression.</li>
<li class=""><code>["Return"]</code> exits the loop and returns the value of the <code>["Return"]</code>
expression.</li>
</ul><p>To exit the loop, a <code>["Break"]</code> or <code>["Return"]</code> expression must be evaluated.</p><p><code>Loop</code> with only a <em>body</em> argument is equivalent to a <code>while(true)</code> in
JavaScript or a <code>While[True, ...]</code> in Mathematica.</p><p class="signature_CWyf"><b>Loop</b>(<em>body</em>, <em>element-1</em>, <em>element-2</em>, ...<!-- -->)</p><p>Iterates over one or more <code>["Element", _name_, _collection_]</code> clauses,
evaluating <code>body</code> once per combination, <strong>for effect</strong>. The value of the
<code>["Loop"]</code> expression is <code>Nothing</code> — unlike <code>Comprehension</code> (see below),
<code>Loop</code> does not accumulate or return a list of results.</p><p>Bindings are evaluated as nested loops, outermost = first <code>Element</code> clause.
Later clauses see earlier bindings in scope, so a clause's collection can
depend on a name bound by an earlier clause (dependent collections work).</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Loop"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Print"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Square"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Element"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"_"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Range"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">5</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 1 4 9 16 25 (printed); the Loop expression evaluates to Nothing</span><br></div></code></pre></div></div><p><code>Loop</code> with a <code>body</code> and a single <code>Element</code> clause is equivalent to a
<code>forEach()</code> in JavaScript. It is somewhat similar to a <code>Do[...]</code> in
Mathematica.</p><p>Inside <code>body</code>:</p><ul>
<li class=""><code>["Break"]</code>, optionally with a value, exits the loop immediately. The
value of the <code>["Loop"]</code> expression is the value of <code>Break</code>, or <code>Nothing</code>
if none was provided.</li>
<li class=""><code>["Continue"]</code> skips to the next iteration.</li>
<li class=""><code>["Return"]</code> exits the loop and propagates out of the enclosing
<code>["Function"]</code> expression.</li>
</ul><p>Bound names do not leak into the enclosing scope.</p><div class="readMore_KWn8"><a href="/compute-engine/reference/collections/#comprehension"><p>To build a <strong>list</strong> from a per-combination computation, use
<strong><code>Comprehension</code></strong> instead (or <strong><code>Map</code></strong> / <strong><code>Filter</code></strong> for the
single-collection case).<svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div></section>
<section id="FixedPoint" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>FixedPoint</b>(<em>body</em>, <em>initial-value</em>)</p><p class="signature_CWyf"><b>FixedPoint</b>(<em>body</em>, <em>initial-value</em>,
<em>max-iterations</em>)</p><p>Assumes <code>body</code> is an expression using an implicit argument <code>_</code>.</p><p>Apply <code>body</code> to <code>initial-value</code>, then apply <code>body</code> to the result until the result
no longer changes.</p><p>To determine if a fixed point has been reached and the loop should terminate,
the previous and current values are compared with <code>Equal</code>.</p><p>Inside <code>body</code>, use a <code>["Break"]</code> expression to exit the loop immediately or
<code>Return</code> to exit the enclosing <code>["Function"]</code> expression.</p><div class="readMore_KWn8"><a href="/compute-engine/reference/collections/#reduce"><p>See also the <strong><code>Reduce</code> function</strong> which operates on a collection</p></a></div></section>
<div class="readMore_KWn8"><a href="/compute-engine/reference/statistics/"><p>Read more about the <code>Product</code> and <code>Sum</code> functions which are specialized version of loops.</p></a></div>
<div class="readMore_KWn8"><a href="/compute-engine/reference/collections/"><p>Read more about operations on collection such as <code>Map</code> and <code>Reduce</code> which are functional
programming constructs that can be used to replace loops.</p></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="latex-syntax-for-control-structures">LaTeX Syntax for Control Structures<a href="#latex-syntax-for-control-structures" class="hash-link" aria-label="Direct link to LaTeX Syntax for Control Structures" title="Direct link to LaTeX Syntax for Control Structures" translate="no"></a></h2>
<p>Control structures are expressed in LaTeX using keywords. Each keyword can be
written three equivalent ways, which may be mixed freely:</p>
<ul>
<li class=""><strong><code>\keyword{if}</code></strong> — the preferred form: stays in math mode and renders with
symmetric keyword spacing.</li>
<li class=""><strong><code>\text{if}</code></strong> — the conventional form.</li>
<li class=""><strong><code>\operatorname{if}</code></strong> (or <code>\mathrm{if}</code>) — operator-name spelling.</li>
</ul>
<p>Multi-word keywords are a single token, e.g. <code>\keyword{for all}</code>. (<code>\keyword{...}</code>
requires the rendering environment to define the <code>\keyword</code> command; <code>\text{...}</code>
and <code>\operatorname{...}</code> render everywhere.)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="inline-if">Inline <code>If</code><a href="#inline-if" class="hash-link" aria-label="Direct link to inline-if" title="Direct link to inline-if" translate="no"></a></h3>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">if</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> x > 0 </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">then</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> x </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">else</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> -x</span><br></div></code></pre></div></div>
<p>Parses to <code>["If", ["Greater", "x", 0], "x", ["Negate", "x"]]</code>.</p>
<p>The <code>else</code> branch is optional.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-bindings"><code>where</code> Bindings<a href="#where-bindings" class="hash-link" aria-label="Direct link to where-bindings" title="Direct link to where-bindings" translate="no"></a></h3>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">x^2 + y^2 </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">where</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> x </span><span class="token function selector" style="color:var(--base-09)">\coloneq</span><span class="token plain"> 3,</span><span class="token function selector" style="color:var(--base-09)">\;</span><span class="token plain"> y </span><span class="token function selector" style="color:var(--base-09)">\coloneq</span><span class="token plain"> 4</span><br></div></code></pre></div></div>
<p>Parses to a <code>["Block"]</code> with variable declarations, assignments, and the body
expression as the return value.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-loops"><code>for</code> Loops<a href="#for-loops" class="hash-link" aria-label="Direct link to for-loops" title="Direct link to for-loops" translate="no"></a></h3>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">for</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> i </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">from</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> 1 </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">to</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> 10 </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">do</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> i^2</span><br></div></code></pre></div></div>
<p>Parses to <code>["Loop", ["Power", "i", 2], ["Element", "i", ["Range", 1, 10]]]</code>.</p>
<p>This is an imperative loop, evaluated for effect: its value is <code>Nothing</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-comprehensions"><code>for</code> Comprehensions<a href="#for-comprehensions" class="hash-link" aria-label="Direct link to for-comprehensions" title="Direct link to for-comprehensions" translate="no"></a></h3>
<p>A trailing <code>for</code> clause produces a list comprehension:</p>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">(x, y) </span><span class="token function selector" style="color:var(--base-09)">\keyword</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">for</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> x = </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain">1...3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain">, y = </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain">1...x</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>Parses to:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Comprehension"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"y"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Element"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Range"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Element"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"y"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Range"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>The trailing <code>for</code> keyword binds looser than <code>,</code> and <code>=</code>, so the body
expression (<code>(x, y)</code> above) is parsed before the keyword fires, and the
bindings are parsed as comma-separated <code>name = expr</code> pairs after it.</p>
<p>Multiple bindings produce a Cartesian product (or a dependency-shaped
iteration when later bindings reference earlier ones). See the
<code>Comprehension</code> definition in the
<a class="" href="/compute-engine/reference/collections/#comprehension"><strong>Collections</strong></a>
reference for full semantics.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="restriction-braces">Restriction Braces<a href="#restriction-braces" class="hash-link" aria-label="Direct link to Restriction Braces" title="Direct link to Restriction Braces" translate="no"></a></h3>
<p>A trailing <code>\{cond\}</code> after an expression masks the value by a predicate:</p>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">f(x)</span><span class="token function selector" style="color:var(--base-09)">\left</span><span class="token function selector" style="color:var(--base-09)">\{</span><span class="token plain">0 < x < 2</span><span class="token function selector" style="color:var(--base-09)">\right</span><span class="token function selector" style="color:var(--base-09)">\}</span><br></div></code></pre></div></div>
<p>Parses to <code>["When", ["f", "x"], ["Less", 0, "x", 2]]</code>.</p>
<p>When the condition is <code>True</code>, the expression evaluates to its left operand;
when <code>False</code>, it evaluates to <code>Undefined</code>. This is distinct from a set
literal (standalone <code>\{1, 2, 3\}</code> continues to parse as a <code>Set</code>); the
disambiguation is positional — trailing braces after a complete expression
attach as a <code>When</code> restriction.</p>
<p>Stacked restrictions chain and canonicalize:</p>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">x</span><span class="token function selector" style="color:var(--base-09)">\left</span><span class="token function selector" style="color:var(--base-09)">\{</span><span class="token plain">x > 0</span><span class="token function selector" style="color:var(--base-09)">\right</span><span class="token function selector" style="color:var(--base-09)">\}</span><span class="token function selector" style="color:var(--base-09)">\left</span><span class="token function selector" style="color:var(--base-09)">\{</span><span class="token plain">x < 10</span><span class="token function selector" style="color:var(--base-09)">\right</span><span class="token function selector" style="color:var(--base-09)">\}</span><br></div></code></pre></div></div>
<p>Parses to <code>["When", "x", ["And", ["Greater", "x", 0], ["Less", "x", 10]]]</code>.
The serializer round-trips this canonical form back to stacked braces.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="semicolon-blocks">Semicolon Blocks<a href="#semicolon-blocks" class="hash-link" aria-label="Direct link to Semicolon Blocks" title="Direct link to Semicolon Blocks" translate="no"></a></h3>
<p>Semicolons (<code>;</code> or <code>\;</code>) act as statement separators to build <code>Block</code>
expressions:</p>
<div class="language-latex codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-latex codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">x </span><span class="token function selector" style="color:var(--base-09)">\coloneq</span><span class="token plain"> 3;</span><span class="token function selector" style="color:var(--base-09)">\;</span><span class="token plain"> x^2 + 1</span><br></div></code></pre></div></div>
<p>Parses to <code>["Block", ["Declare", "x"], ["Assign", "x", 3], ["Add", ["Power", "x", 2], 1]]</code>.</p>
<div class="readMore_KWn8"><a href="/compute-engine/guides/compiling/"><p>Read more about <strong>compiling</strong> control structures to JavaScript.</p></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="controlling-the-flow-of-execution">Controlling the Flow of Execution<a href="#controlling-the-flow-of-execution" class="hash-link" aria-label="Direct link to Controlling the Flow of Execution" title="Direct link to Controlling the Flow of Execution" translate="no"></a></h2>
<p><strong>To exit a function</strong>, use <code>Return</code>.</p>
<p><strong>To control the flow of a loop expression</strong>, use <code>Break</code> and <code>Continue</code>.</p>
<section id="Return" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Return</b>(<em>value</em>)</p><p>Interrupts the evaluation of a <code>["Function"]</code> expression. The value of the
<code>["Function"]</code> expression is <code>value</code>.</p><p>The <code>["Return"]</code> expression is useful when used with functions that have
multiple exit points, conditional logic, loops, etc...</p><p>Here's a contrived example of a function that returns the sign of a number:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Function"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Block"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Greater"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Return"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"If"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Less"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Return"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">-1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div><div class="readMore_KWn8"><a href="/compute-engine/reference/functions/"><p>Read more about <strong>functions</strong>.</p></a></div></section>
<section id="Break" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Break</b>()</p><p class="signature_CWyf"><b>Break</b>(<em>value</em>)</p><p><code>Break</code> is a registered operator. When in a loop, exit the loop immediately.
The value of the enclosing <code>["Loop"]</code> expression becomes <code>value</code>, or
<code>Nothing</code> if not provided.</p><p>Outside a loop, <code>Break</code> is inert.</p></section>
<section id="Continue" class="functionDefinition_O4AF"><p class="signature_CWyf"><b>Continue</b>()</p><p><code>Continue</code> is a registered operator. When in a loop, skip to the next
iteration of the loop. <code>Continue</code> takes no argument.</p><p>Outside a loop, <code>Continue</code> is inert.</p></section></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"></div><div class="col lastUpdated_VsjB"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/compute-engine/reference/complex/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Complex</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/compute-engine/reference/core/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Core</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#sequential-control-structure" class="table-of-contents__link toc-highlight">Sequential Control Structure</a></li><li><a href="#conditional-control-structure" class="table-of-contents__link toc-highlight">Conditional Control Structure</a></li><li><a href="#loops" class="table-of-contents__link toc-highlight">Loops</a></li><li><a href="#latex-syntax-for-control-structures" class="table-of-contents__link toc-highlight">LaTeX Syntax for Control Structures</a><ul><li><a href="#inline-if" class="table-of-contents__link toc-highlight">Inline <code>If</code></a></li><li><a href="#where-bindings" class="table-of-contents__link toc-highlight"><code>where</code> Bindings</a></li><li><a href="#for-loops" class="table-of-contents__link toc-highlight"><code>for</code> Loops</a></li><li><a href="#for-comprehensions" class="table-of-contents__link toc-highlight"><code>for</code> Comprehensions</a></li><li><a href="#restriction-braces" class="table-of-contents__link toc-highlight">Restriction Braces</a></li><li><a href="#semicolon-blocks" class="table-of-contents__link toc-highlight">Semicolon Blocks</a></li></ul></li><li><a href="#controlling-the-flow-of-execution" class="table-of-contents__link toc-highlight">Controlling the Flow of Execution</a></li></ul></div></div></div></div></main></div></div></div><div class="shared-footer"><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">SDKs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/mathfield/">Mathfield</a></li><li class="footer__item"><a class="footer__link-item" href="/compute-engine/">Compute Engine</a></li><li class="footer__item"><a class="footer__link-item" href="/math-json/">MathJSON</a></li><li class="footer__item"><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="footer__link-item">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#github"></use></svg>
GitHub
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li><li class="footer__item"><a href="https://discord.gg/yhmvVeJ4Hd" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#discord"></use></svg>
Discord
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li><li class="footer__item"><a href="https://chatgpt.com/g/g-8YgEfR7ig-mathlive-gpt" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#openai"></use></svg>
MathLive GPT
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/about/">About Us</a></li></ul></div></div></div></footer></div></div>
</body>
</html>