-
Notifications
You must be signed in to change notification settings - Fork 1
/
glossary.html
617 lines (513 loc) · 34.8 KB
/
glossary.html
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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Glossary — ClojureBridgeMN Documentation November 4-5, 2016 documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="index" title="Index"
href="genindex.html"/>
<link rel="search" title="Search" href="search.html"/>
<link rel="top" title="ClojureBridgeMN Documentation November 4-5, 2016 documentation" href="index.html"/>
<link rel="up" title="Clojure Resources" href="resources.html"/>
<link rel="next" title="Connect with the Clojure Community" href="community.html"/>
<link rel="prev" title="Clojure Resources" href="resources.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> ClojureBridgeMN Documentation
</a>
<div class="version">
Saturday Nov 5 2016 @ 15:59:08 futuro
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="setup.html">Installfest</a></li>
<li class="toctree-l1"><a class="reference internal" href="welcome.html">Welcome to ClojureBridge</a></li>
<li class="toctree-l1"><a class="reference internal" href="track1.html">Track 1</a></li>
<li class="toctree-l1"><a class="reference internal" href="track2.html">Track 2</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="resources.html">Clojure Resources</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">Glossary</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#arity">arity</a></li>
<li class="toctree-l3"><a class="reference internal" href="#binding-form">binding-form</a></li>
<li class="toctree-l3"><a class="reference internal" href="#classpath">classpath</a></li>
<li class="toctree-l3"><a class="reference internal" href="#comparator">comparator</a></li>
<li class="toctree-l3"><a class="reference internal" href="#coordinates">coordinates</a></li>
<li class="toctree-l3"><a class="reference internal" href="#destructuring">destructuring</a></li>
<li class="toctree-l3"><a class="reference internal" href="#dereference">dereference</a></li>
<li class="toctree-l3"><a class="reference internal" href="#entry">entry</a></li>
<li class="toctree-l3"><a class="reference internal" href="#evaluator">evaluator</a></li>
<li class="toctree-l3"><a class="reference internal" href="#form">form</a></li>
<li class="toctree-l3"><a class="reference internal" href="#head-retention">head retention</a></li>
<li class="toctree-l3"><a class="reference internal" href="#homoiconicity">homoiconicity</a></li>
<li class="toctree-l3"><a class="reference internal" href="#idempotent">idempotent</a></li>
<li class="toctree-l3"><a class="reference internal" href="#identity">identity</a></li>
<li class="toctree-l3"><a class="reference internal" href="#implicit-do">implicit do</a></li>
<li class="toctree-l3"><a class="reference internal" href="#intern">intern</a></li>
<li class="toctree-l3"><a class="reference internal" href="#keyword">keyword</a></li>
<li class="toctree-l3"><a class="reference internal" href="#lazy">lazy</a></li>
<li class="toctree-l3"><a class="reference internal" href="#let-binding">let-binding</a></li>
<li class="toctree-l3"><a class="reference internal" href="#libspec">libspec</a></li>
<li class="toctree-l3"><a class="reference internal" href="#macro">macro</a></li>
<li class="toctree-l3"><a class="reference internal" href="#map">map</a></li>
<li class="toctree-l3"><a class="reference internal" href="#memoization">memoization</a></li>
<li class="toctree-l3"><a class="reference internal" href="#metadata">metadata</a></li>
<li class="toctree-l3"><a class="reference internal" href="#namespaced-keyword">namespaced keyword</a></li>
<li class="toctree-l3"><a class="reference internal" href="#nullipotent">nullipotent</a></li>
<li class="toctree-l3"><a class="reference internal" href="#predicate">predicate</a></li>
<li class="toctree-l3"><a class="reference internal" href="#pure-function">pure function</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reader">reader</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reader-macro">reader macro</a></li>
<li class="toctree-l3"><a class="reference internal" href="#realize">realize</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reference-types">reference types</a></li>
<li class="toctree-l3"><a class="reference internal" href="#referential-transparency">referential transparency</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reify">reify</a></li>
<li class="toctree-l3"><a class="reference internal" href="#repl">REPL</a></li>
<li class="toctree-l3"><a class="reference internal" href="#rest-args">rest args</a></li>
<li class="toctree-l3"><a class="reference internal" href="#s-expression">s-expression</a></li>
<li class="toctree-l3"><a class="reference internal" href="#state">state</a></li>
<li class="toctree-l3"><a class="reference internal" href="#stm-software-transactional-memory">STM (Software Transactional Memory)</a></li>
<li class="toctree-l3"><a class="reference internal" href="#symbol">symbol</a></li>
<li class="toctree-l3"><a class="reference internal" href="#tagged-literals">tagged literals</a></li>
<li class="toctree-l3"><a class="reference internal" href="#threading-macros">threading macros</a></li>
<li class="toctree-l3"><a class="reference internal" href="#thrush">thrush</a></li>
<li class="toctree-l3"><a class="reference internal" href="#transaction">transaction</a></li>
<li class="toctree-l3"><a class="reference internal" href="#type-erasure">type erasure</a></li>
<li class="toctree-l3"><a class="reference internal" href="#value">value</a></li>
<li class="toctree-l3"><a class="reference internal" href="#variadic">variadic</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#essential-resources">Essential Resources</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#more-pointers-to-getting-started">More pointers to getting started</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#exercises-that-help-learn-clojure">Exercises that help learn Clojure</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#clojure-development-environments">Clojure Development Environments</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#related-tools">Related tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#finding-clojure-libraries">Finding Clojure libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#books-and-tutorials">Books and tutorials</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#clojurescript">ClojureScript</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#videos">Videos</a></li>
<li class="toctree-l2"><a class="reference internal" href="resources.html#cheatsheets">Cheatsheets</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="community.html">Connect with the Clojure Community</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">ClojureBridgeMN Documentation</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> »</li>
<li><a href="resources.html">Clojure Resources</a> »</li>
<li>Glossary</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/glossary.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="glossary">
<h1>Glossary<a class="headerlink" href="#glossary" title="Permalink to this headline">¶</a></h1>
<p>A glossary of terminology specific to Clojure. Terms
are listed in alphabetical order.</p>
<p><em>What about...?</em> Are we missing a term you you need? Let us know!
You can ask by filing a new <a class="reference external" href="https://github.com/clojurebridge-minneapolis/installfest/issues">issue</a>.</p>
<p><em>NOTE:</em> portions of this glossary have been adapted
from the <a class="reference external" href="https://github.com/clojuredocs/guides">Clojure Doc Site</a>
under the <a class="reference external" href="http://creativecommons.org/licenses/by/3.0/">CC-BY-SA 3.0</a> license.</p>
<hr class="docutils" />
<div class="section" id="arity">
<h2>arity<a class="headerlink" href="#arity" title="Permalink to this headline">¶</a></h2>
<p>The number of arguments a function takes is its arity. If it’s
written to take a variable number of args, it’s referred to as
<a class="reference external" href="#variadic">variadic</a>.</p>
<p>Functions can have multiple arity (for example, a function might have
2 different bodies: one for when 2 args are passed, and another when 3
args are passed).</p>
</div>
<div class="section" id="binding-form">
<h2>binding-form<a class="headerlink" href="#binding-form" title="Permalink to this headline">¶</a></h2>
<p>Could mean one of two things:</p>
<ol class="simple">
<li>the expression you’re binding to in a
<a class="reference external" href="#let_binding">let-binding</a>. It might be a simple name, or it
might be a data structure used for
<a class="reference external" href="#destructuring">destructuring</a>.</li>
<li>Clojure provides the <code class="docutils literal"><span class="pre">binding</span></code> macro, used for setting the
thread-local value of a dynamic var. The whole expression (form)
is sometimes referred to as the “binding <a class="reference external" href="#form">form</a>”.</li>
</ol>
</div>
<div class="section" id="classpath">
<h2>classpath<a class="headerlink" href="#classpath" title="Permalink to this headline">¶</a></h2>
<p>The search path used by the JVM to locate classes which are not
part of the Java standard class library. May include jar files.</p>
</div>
<div class="section" id="comparator">
<h2>comparator<a class="headerlink" href="#comparator" title="Permalink to this headline">¶</a></h2>
<p>A function that takes two args and compares them. Returns -1, 0, or 1
depending whether the first arg is less than, equal to or greater than
the second. The stock comparator that Clojure.core comes with is
<code class="docutils literal"><span class="pre">compare</span></code>.</p>
</div>
<div class="section" id="coordinates">
<h2>coordinates<a class="headerlink" href="#coordinates" title="Permalink to this headline">¶</a></h2>
<p>The “group-id/artifact-id version-string” identifier used in your
project.clj to indicate a particular dependency.</p>
<p>See also <a class="reference external" href="#libspec">libspec</a>.</p>
</div>
<div class="section" id="destructuring">
<h2>destructuring<a class="headerlink" href="#destructuring" title="Permalink to this headline">¶</a></h2>
<p>The handy trick used in a <a class="reference external" href="#let_binding">let-binding</a> to “unpack” the
values from a data structure into the locals you’re going to use. See
also <a class="reference external" href="#binding-form">binding-form</a>.</p>
</div>
<div class="section" id="dereference">
<h2>dereference<a class="headerlink" href="#dereference" title="Permalink to this headline">¶</a></h2>
<p>To get the value of a reference type. You can use the <code class="docutils literal"><span class="pre">deref</span></code> function
for this, or else some syntactic sugar: <code class="docutils literal"><span class="pre">@some-ref-type</span></code>.</p>
</div>
<div class="section" id="entry">
<h2>entry<a class="headerlink" href="#entry" title="Permalink to this headline">¶</a></h2>
<p>A key/value pair in a map. Try <code class="docutils literal"><span class="pre">(type</span> <span class="pre">(first</span> <span class="pre">{:a</span> <span class="pre">1</span> <span class="pre">:b</span> <span class="pre">2}))</span></code> and see
that it returns <code class="docutils literal"><span class="pre">clojure.lang.MapEntry</span></code>.</p>
</div>
<div class="section" id="evaluator">
<h2>evaluator<a class="headerlink" href="#evaluator" title="Permalink to this headline">¶</a></h2>
<p><em>todo</em></p>
</div>
<div class="section" id="form">
<h2>form<a class="headerlink" href="#form" title="Permalink to this headline">¶</a></h2>
<p>A valid s-expression. For example: <code class="docutils literal"><span class="pre">(+</span> <span class="pre">1</span> <span class="pre">1)</span></code> and <code class="docutils literal"><span class="pre">(defn</span> <span class="pre">foo</span> <span class="pre">[x]</span> <span class="pre">(*</span> <span class="pre">x</span> <span class="pre">x))</span></code>.</p>
</div>
<div class="section" id="head-retention">
<h2>head retention<a class="headerlink" href="#head-retention" title="Permalink to this headline">¶</a></h2>
<p><a class="reference external" href="#lazy">Lazy</a> sequences are still <a class="reference external" href="#persistence">persistent</a>. If you
make <em>another</em> data structure using one, the original lazy sequence
will be kept around and not garbage-collected. If the lazy sequence in
infinite, and grows very large, it can cause performance problems or
even an out-of-memory error. Accidentally keeping around a lazy
sequence like this is referred to as “head retention”.</p>
</div>
<div class="section" id="homoiconicity">
<h2>homoiconicity<a class="headerlink" href="#homoiconicity" title="Permalink to this headline">¶</a></h2>
<p>Where the code and the data is represented by the same structure.
This allows the code to be treated as data, and the data to be treated
as code. This feature of Clojure, and other Lisps, allows for
macros in the language, since they can operate on code as a data
structure, and to return a transformation of that structure to
be the representation of new code.</p>
</div>
<div class="section" id="idempotent">
<h2>idempotent<a class="headerlink" href="#idempotent" title="Permalink to this headline">¶</a></h2>
<p>An operation that when given the same inputs will produce the same
result when called one or more times. An idempotent function may
produce a side effect, such a updating a ref or an atom, but will
only produce the side effect once. An idempotent function is
different than a pure function, in that a pure function will
produce no side effects.</p>
</div>
<div class="section" id="identity">
<h2>identity<a class="headerlink" href="#identity" title="Permalink to this headline">¶</a></h2>
<p>A logical entity in your program that may change over time — it may
take on different states at different times, but it still means the
same logical entity. Clojure uses <a class="reference external" href="#reference_types">reference types</a>
to represent identities. This is not to be confused with the <code class="docutils literal"><span class="pre">identity</span></code> function that just returns the argument given to it.</p>
</div>
<div class="section" id="implicit-do">
<h2>implicit do<a class="headerlink" href="#implicit-do" title="Permalink to this headline">¶</a></h2>
<p>The bodies of some expressions act like <code class="docutils literal"><span class="pre">do</span></code> in that you can include
multiple expressions in them, and the expressions will be evaluated in
the order they appear, with the resulting value of the body being the
last expression evaluated. Forms that do this include: <code class="docutils literal"><span class="pre">when</span></code>,
<code class="docutils literal"><span class="pre">when-let</span></code>, <code class="docutils literal"><span class="pre">fn</span></code>, <code class="docutils literal"><span class="pre">defn</span></code>, <code class="docutils literal"><span class="pre">let</span></code>, <code class="docutils literal"><span class="pre">loop</span></code>, and <code class="docutils literal"><span class="pre">try</span></code>.</p>
</div>
<div class="section" id="intern">
<h2>intern<a class="headerlink" href="#intern" title="Permalink to this headline">¶</a></h2>
<p>A method of storing values or immutable data structures as a single
copy of the item, allowing for more space-efficiency, and possibly
time-efficiency, with the trade off of requiring more time being
required when interning the item. When the string “clojure” is interned,
all instances of the string “clojure” will reference the exact same
instance, instead of having multiple string objects with the same value
of “clojure”.</p>
</div>
<div class="section" id="keyword">
<h2>keyword<a class="headerlink" href="#keyword" title="Permalink to this headline">¶</a></h2>
<p>A Clojure scalar data type whose literal syntax looks <code class="docutils literal"><span class="pre">:like</span></code> <code class="docutils literal"><span class="pre">:this</span></code>.
They are like numbers and strings in that they evaluate to themselves,
and are most often seen being used as keys in <a class="reference external" href="#map">hash-maps</a>.</p>
<p>See also <a class="reference external" href="#namespaced_keyword">namespaced keyword</a></p>
<p>The term is also used when talking about functions that take “keyword
arguments”, for example, something like: <code class="docutils literal"><span class="pre">(my-func</span> <span class="pre">:speed</span> <span class="pre">42</span> <span class="pre">:mass</span> <span class="pre">2)</span></code>
(as opposed to <code class="docutils literal"><span class="pre">(my-func</span> <span class="pre">{:speed</span> <span class="pre">42</span> <span class="pre">:mass</span> <span class="pre">2})</span></code>).</p>
</div>
<div class="section" id="lazy">
<h2>lazy<a class="headerlink" href="#lazy" title="Permalink to this headline">¶</a></h2>
<p>Clojure can (and often does) create sequences for you that aren’t
fully computed. Upon casual inspection they <em>look</em> just like a regular
list, but particular values in them are only computed the moment you
ask for them — not sooner.</p>
<p>This has the added benefit that you can easily create infinite
sequences that don’t consume infinite memory.</p>
<p>Many of the built-in Clojure functions return lazy sequences.</p>
<p>See also <a class="reference external" href="#realize">realize</a>.</p>
</div>
<div class="section" id="let-binding">
<h2>let-binding<a class="headerlink" href="#let-binding" title="Permalink to this headline">¶</a></h2>
<p>AKA, “binding vector”, or just “bindings”: in a <code class="docutils literal"><span class="pre">let</span></code> (and expressions
that work like let, for example, <code class="docutils literal"><span class="pre">defn</span></code>, <code class="docutils literal"><span class="pre">loop</span></code>, <code class="docutils literal"><span class="pre">loop</span></code>, & <code class="docutils literal"><span class="pre">fn</span></code>), the
vector that comes first where you specify lexical bindings.</p>
<p>See also <a class="reference external" href="#binding_form">binding form</a></p>
</div>
<div class="section" id="libspec">
<h2>libspec<a class="headerlink" href="#libspec" title="Permalink to this headline">¶</a></h2>
<p><em>todo</em></p>
</div>
<div class="section" id="macro">
<h2>macro<a class="headerlink" href="#macro" title="Permalink to this headline">¶</a></h2>
<p>A special type of function which is transforms a S-Expression read in
and applies a transformation to the S-Expression resulting in a new
form. This process is called macro-expansion, and is done as part
of the Clojure reader.</p>
</div>
<div class="section" id="map">
<h2>map<a class="headerlink" href="#map" title="Permalink to this headline">¶</a></h2>
<p>Either refers to the built in <code class="docutils literal"><span class="pre">map</span></code> function, or else means “a
hash-map object”.</p>
</div>
<div class="section" id="memoization">
<h2>memoization<a class="headerlink" href="#memoization" title="Permalink to this headline">¶</a></h2>
<p>The ability to cache a result of a function call by given arguments,
and return the result without having to do the calculation again.
Memoization is a time-space trade off in that more memory is used
to store the results of a function call to be able to return the
value instead of having to keep spending time doing the calculation
involved in the function.</p>
</div>
<div class="section" id="metadata">
<h2>metadata<a class="headerlink" href="#metadata" title="Permalink to this headline">¶</a></h2>
<p>An extra map that you can attach to a collection value (or a symbol),
which contains data about the data you’re attaching it to. Use <code class="docutils literal"><span class="pre">meta</span></code>
to see the metadata of a given value.</p>
</div>
<div class="section" id="namespaced-keyword">
<h2>namespaced keyword<a class="headerlink" href="#namespaced-keyword" title="Permalink to this headline">¶</a></h2>
<p>When you put two colons in front of a keyword’s name — for example
::foo — it is a so-called “namespaced keyword”, and is expanded by
the reader to become :current-namespace/foo.</p>
</div>
<div class="section" id="nullipotent">
<h2>nullipotent<a class="headerlink" href="#nullipotent" title="Permalink to this headline">¶</a></h2>
<p>An operation with no side effects. The result of calling the function
one or more times is the same as if it was never called. Queries are
typically good examples of functions that are nullipotent, as they
do not modify the state of the object or structure they are queried
against.</p>
</div>
<div class="section" id="predicate">
<h2>predicate<a class="headerlink" href="#predicate" title="Permalink to this headline">¶</a></h2>
<p>A function taking one or more args and returning a boolean (<code class="docutils literal"><span class="pre">true</span></code> or
<code class="docutils literal"><span class="pre">false</span></code>). Its name typically ends with a question mark. Some examples:
<code class="docutils literal"><span class="pre">nil?</span></code>, <code class="docutils literal"><span class="pre">zero?</span></code>, <code class="docutils literal"><span class="pre">string?</span></code>.</p>
</div>
<div class="section" id="pure-function">
<h2>pure function<a class="headerlink" href="#pure-function" title="Permalink to this headline">¶</a></h2>
<p>A function that given the same inputs will always produce the same
result. A pure function also does not have any observable side effects
and cannot depend on any outside state, other than that which was given
as arguments to the function. A pure function’s result also cannot change
during the execution of the program or between executions of the program,
as the dependency on outside state can lead to changes in the result of
the function. Pure functions are also
<a class="reference external" href="#referential-transparency">referentially transparent.</a></p>
</div>
<div class="section" id="reader">
<h2>reader<a class="headerlink" href="#reader" title="Permalink to this headline">¶</a></h2>
<p><em>todo</em></p>
</div>
<div class="section" id="reader-macro">
<h2>reader macro<a class="headerlink" href="#reader-macro" title="Permalink to this headline">¶</a></h2>
<p>Syntax that the Clojure reader recognizes as special syntactic sugar,
for example, <code class="docutils literal"><span class="pre">#""</span></code>, <code class="docutils literal"><span class="pre">#{}</span></code>, quoting, etc.</p>
</div>
<div class="section" id="realize">
<h2>realize<a class="headerlink" href="#realize" title="Permalink to this headline">¶</a></h2>
<p>When the next value in a <a class="reference external" href="#lazy">lazy</a> sequence is accessed for the
first time, and is computed so as to made available, it is said to
have been “realized”. This term is also used to refer to the status of <strong>promises</strong>, <strong>futures</strong>, and <strong>delays</strong>. That is, if a promise (for example) is realized then that means its value has been delivered and is accessible via <a class="reference external" href="#dereference">dereferencing</a>.</p>
</div>
<div class="section" id="reference-types">
<h2>reference types<a class="headerlink" href="#reference-types" title="Permalink to this headline">¶</a></h2>
<p>Vars, atoms, refs, and agents are all reference types. They are
mutable in the sense that you can change to what value they refer, and
Clojure provides thread-safe mechanisms for doing so.</p>
</div>
<div class="section" id="referential-transparency">
<h2>referential transparency<a class="headerlink" href="#referential-transparency" title="Permalink to this headline">¶</a></h2>
<p>An expression that will always return the same result for the values
given, and can be substituted for the resulting value, without
effecting the program. The advantage of referential transparent
expressions is that they can be memoized, and be the subject of
various compilier optimizations.</p>
</div>
<div class="section" id="reify">
<h2>reify<a class="headerlink" href="#reify" title="Permalink to this headline">¶</a></h2>
<p><em>todo</em></p>
</div>
<div class="section" id="repl">
<h2>REPL<a class="headerlink" href="#repl" title="Permalink to this headline">¶</a></h2>
<p>Short for: “Read, Eval, Print, Loop”. The REPL reads in text through
the <a class="reference external" href="#reader">reader</a> transforming it into a Clojure data structure,
<a class="reference external" href="#evaluator">evaluates</a> the data structure as code, prints the result
of the evaluation, and loops back waiting to read the next input string.</p>
</div>
<div class="section" id="rest-args">
<h2>rest args<a class="headerlink" href="#rest-args" title="Permalink to this headline">¶</a></h2>
<p>The extra args passed to a <a class="reference external" href="#variadic">variadic</a> function, for example
if <code class="docutils literal"><span class="pre">my-func</span></code> were defined like <code class="docutils literal"><span class="pre">(defn</span> <span class="pre">my-func</span> <span class="pre">[a</span> <span class="pre">b</span> <span class="pre">&</span> <span class="pre">more]</span> <span class="pre">...)</span></code>, then
called like <code class="docutils literal"><span class="pre">(my-func</span> <span class="pre">1</span> <span class="pre">2</span> <span class="pre">3</span> <span class="pre">4</span> <span class="pre">5)</span></code>, then 3, 4, & 5 are the “rest args”.</p>
</div>
<div class="section" id="s-expression">
<h2>s-expression<a class="headerlink" href="#s-expression" title="Permalink to this headline">¶</a></h2>
<p>Short for Symbolic Expression. A S-Expression is a data structure able
to represent both simple datastructes such as literals, or complex data
structures such as nested expressions. Due to their versatile nature,
S-Expressions are able to represent both data in Clojure, as well as
the Clojure code itself, allowing Clojure to be a
<a class="reference external" href="#homoiconicity">homoiconic</a> language.</p>
</div>
<div class="section" id="state">
<h2>state<a class="headerlink" href="#state" title="Permalink to this headline">¶</a></h2>
<p>The <a class="reference external" href="#value">value</a> that a given <a class="reference external" href="#identity">identity</a> may have at a
given time. When you change the state of an identity, you’re changing
to which value it refers. Clojure uses values to represent states.</p>
</div>
<div class="section" id="stm-software-transactional-memory">
<h2>STM (Software Transactional Memory)<a class="headerlink" href="#stm-software-transactional-memory" title="Permalink to this headline">¶</a></h2>
<p>Software Transactional Memory (STM) is a concurrency control method to
coordinate and control access to shared storage as an alternative to
lock-based synchronization. Clojure’s STM uses multiversion concurrency
control (MVCC) as an alternative to lock-based transactions, as well as
ensuring changes are made atomically, consistently, and in
isolation. It does this by taking a snapshot of the ref, making the
changes in isolation to the snapshot, and apply the result. If the STM
detects that another transaction has made an update to the ref, the
current transaction will be forced to retry.</p>
</div>
<div class="section" id="symbol">
<h2>symbol<a class="headerlink" href="#symbol" title="Permalink to this headline">¶</a></h2>
<p>An identifier that refers to vars or local values.</p>
</div>
<div class="section" id="tagged-literals">
<h2>tagged literals<a class="headerlink" href="#tagged-literals" title="Permalink to this headline">¶</a></h2>
<p>(Formerly called “reader literals”.)</p>
<p>Some literals begin with a hash mark “#” (so-called “dispatch
macros”); for example, <code class="docutils literal"><span class="pre">#{}</span></code> for sets and <code class="docutils literal"><span class="pre">#""</span></code> for regex
literals. Starting with Clojure 1.4, you can create your own
#-prefixed literal which causes the reader to parse the form
following it using a function or macro of your own
choosing/devising. It’s in this way that you can <em>tag</em> a literal to be
handled specially by the reader.</p>
<p>For more info, see <a class="reference external" href="http://clojure.org/reader">the “Tagged Literals” section of the reader
doc</a>.</p>
</div>
<div class="section" id="threading-macros">
<h2>threading macros<a class="headerlink" href="#threading-macros" title="Permalink to this headline">¶</a></h2>
<p>The thread-first (<code class="docutils literal"><span class="pre">-></span></code>) and thread-last (<code class="docutils literal"><span class="pre">->></span></code>) macros. “Threading”
refers to how they pass values to each subsequent argument in the
macro, not concurrency.</p>
</div>
<div class="section" id="thrush">
<h2>thrush<a class="headerlink" href="#thrush" title="Permalink to this headline">¶</a></h2>
<p>A combinator. Not the same thing as the <a class="reference external" href="#threading-macros">thread-first
macro</a>. More info at
<a class="reference external" href="http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/">http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/</a> if you’re
curious.</p>
</div>
<div class="section" id="transaction">
<h2>transaction<a class="headerlink" href="#transaction" title="Permalink to this headline">¶</a></h2>
<p><em>todo</em></p>
</div>
<div class="section" id="type-erasure">
<h2>type erasure<a class="headerlink" href="#type-erasure" title="Permalink to this headline">¶</a></h2>
<p>Java-related: Java generics allow you to specify a type for a
collection. This way you don’t have to cast every object you pull out
of an ArrayList like in the old days. This is a courtesy of the java
compiler. The java runtime doesn’t know about generics — the
compiler does all the checking for you, then the type information is
discarded at runtime. In Clojure, this discarding is referred to as
type erasure.</p>
</div>
<div class="section" id="value">
<h2>value<a class="headerlink" href="#value" title="Permalink to this headline">¶</a></h2>
<p>An immutable object, such as the number 1, the character <code class="docutils literal"><span class="pre">\a</span></code>, the
string “hello”, or the vector <code class="docutils literal"><span class="pre">[1</span> <span class="pre">2</span> <span class="pre">3]</span></code>. In Clojure, all scalars and
built-in core data structures are values.</p>
</div>
<div class="section" id="variadic">
<h2>variadic<a class="headerlink" href="#variadic" title="Permalink to this headline">¶</a></h2>
<p>A function that can take a variable number of arguments.
See also <a class="reference external" href="#rest_args">rest args</a>.</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="community.html" class="btn btn-neutral float-right" title="Connect with the Clojure Community" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="resources.html" class="btn btn-neutral" title="Clojure Resources" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
© Copyright 2016 ClojureBridgeMN volunteers.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'November 4-5, 2016',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>