Skip to content

Commit 9ebb19f

Browse files
author
Quarto GHA Workflow Runner
committed
Built site for gh-pages
1 parent 9e6c70d commit 9ebb19f

11 files changed

Lines changed: 285 additions & 273 deletions

File tree

.nojekyll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d0fac674
1+
6ce62417

clojure+/print/objects_and_protocols.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -399,20 +399,20 @@ <h1 class="title">Printing Objects in Clojure</h1>
399399
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> (<span class="va">#'clojure.core/print-object</span> x w))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
400400
</div>
401401
<div class="printedClojure">
402-
<div class="sourceCode" id="cb2"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.lang.MultiFn <span class="bn">0x3eb022c2</span> <span class="st">"clojure.lang.MultiFn@3eb022c2"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
402+
<div class="sourceCode" id="cb2"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.lang.MultiFn <span class="bn">0xec824ca</span> <span class="st">"clojure.lang.MultiFn@ec824ca"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
403403
</div>
404404
<div class="sourceClojure">
405405
<div class="sourceCode" id="cb3"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>(Object.)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
406406
</div>
407407
<div class="printedClojure">
408-
<div class="sourceCode" id="cb4"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>#object[java.lang.Object <span class="bn">0x52e2e8bb</span> <span class="st">"java.lang.Object@52e2e8bb"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
408+
<div class="sourceCode" id="cb4"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>#object[java.lang.Object <span class="bn">0x20b60f8c</span> <span class="st">"java.lang.Object@20b60f8c"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
409409
</div>
410410
<p>The syntax is <code>#object[CLASS-NAME HASH toString())]</code> and as you can see, the toString of an Object is <code>CLASS-NAME@HASH</code>. This can get pretty ugly:</p>
411411
<div class="sourceClojure">
412412
<div class="sourceCode" id="cb5"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>(async/chan)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
413413
</div>
414414
<div class="printedClojure">
415-
<div class="sourceCode" id="cb6"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.core.async.impl.channels.ManyToManyChannel <span class="bn">0x7abdb7cf</span> <span class="st">"clojure.core.async.impl.channels.ManyToManyChannel@7abdb7cf"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
415+
<div class="sourceCode" id="cb6"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.core.async.impl.channels.ManyToManyChannel <span class="bn">0x602947e7</span> <span class="st">"clojure.core.async.impl.channels.ManyToManyChannel@602947e7"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
416416
</div>
417417
<p><a href="https://github.com/tonsky/clojure-plus">clojure-plus</a> provides print-methods to improve printing many things.</p>
418418
<div class="sourceClojure">

clojure/print_object/objection.jpg

89.2 KB
Loading

clojure/print_object/remove_extraneous.html

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114

115115
<meta property="og:title" content="Clean object printing by removing extraneous – Clojure Civitas">
116116
<meta property="og:description" content="">
117-
<meta property="og:image" content="https://clojurecivitas.github.io/clojure/print_object/images/civitas-icon.svg">
117+
<meta property="og:image" content="https://clojurecivitas.github.io/clojure/print_object/objection.jpg">
118118
<meta property="og:site_name" content="Clojure Civitas">
119119
</head>
120120

@@ -406,34 +406,40 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
406406
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> (<span class="va">#'clojure.core/print-object</span> x w))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
407407
</div>
408408
<div class="printedClojure">
409-
<div class="sourceCode" id="cb2"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.lang.MultiFn <span class="bn">0x3eb022c2</span> <span class="st">"clojure.lang.MultiFn@3eb022c2"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
409+
<div class="sourceCode" id="cb2"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.lang.MultiFn <span class="bn">0xec824ca</span> <span class="st">"clojure.lang.MultiFn@ec824ca"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
410410
</div>
411411
<div class="sourceClojure">
412412
<div class="sourceCode" id="cb3"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>(Object.)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
413413
</div>
414414
<div class="printedClojure">
415-
<div class="sourceCode" id="cb4"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>#object[java.lang.Object <span class="bn">0x232f05b0</span> <span class="st">"java.lang.Object@232f05b0"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
415+
<div class="sourceCode" id="cb4"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>#object[java.lang.Object <span class="bn">0x56ec31ca</span> <span class="st">"java.lang.Object@56ec31ca"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
416416
</div>
417417
<p>The syntax is <code>#object[CLASS-NAME HASH toString())]</code> and as you can see, the toString of an Object is <code>CLASS-NAME@HASH</code>. For most objects this becomes quite a long string.</p>
418418
<div class="sourceClojure">
419419
<div class="sourceCode" id="cb5"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>(async/chan)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
420420
</div>
421421
<div class="printedClojure">
422-
<div class="sourceCode" id="cb6"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.core.async.impl.channels.ManyToManyChannel <span class="bn">0x40a0c58c</span> <span class="st">"clojure.core.async.impl.channels.ManyToManyChannel@40a0c58c"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
422+
<div class="sourceCode" id="cb6"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.core.async.impl.channels.ManyToManyChannel <span class="bn">0x1ece307c</span> <span class="st">"clojure.core.async.impl.channels.ManyToManyChannel@1ece307c"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
423+
</div>
424+
<div class="quarto-figure quarto-figure-center">
425+
<figure class="figure">
426+
<p><img src="objection.jpg" class="img-fluid figure-img"></p>
427+
<figcaption>Objection!</figcaption>
428+
</figure>
423429
</div>
424430
<p>Functions are printed as objects</p>
425431
<div class="sourceClojure">
426432
<div class="sourceCode" id="cb7"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>(<span class="kw">fn</span> [x] x)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
427433
</div>
428434
<div class="printedClojure">
429-
<div class="sourceCode" id="cb8"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.print_object.remove_extraneous$eval22346$fn__22347 <span class="bn">0x43f3ff50</span> <span class="st">"clojure.print_object.remove_extraneous$eval22346$fn__22347@43f3ff50"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
435+
<div class="sourceCode" id="cb8"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.print_object.remove_extraneous$eval22346$fn__22347 <span class="bn">0x17a3aa29</span> <span class="st">"clojure.print_object.remove_extraneous$eval22346$fn__22347@17a3aa29"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
430436
</div>
431437
<p>It’s quite easy to miss the fact that it is a function as we are looking for a tiny little <code>fn</code> in a sea of text. If, like me, you are fond of the <a href="../../code_interview/beating/with_stupid_stuff/z_combinator_gambit.html">odd lambda calculus excursion</a>, things get even more hectic.</p>
432438
<div class="sourceClojure">
433439
<div class="sourceCode" id="cb9"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>((<span class="kw">fn</span> [x] (<span class="kw">fn</span> [v] ((x x) v))) (<span class="kw">fn</span> [y] y))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
434440
</div>
435441
<div class="printedClojure">
436-
<div class="sourceCode" id="cb10"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352 <span class="bn">0x677f0c10</span> <span class="st">"clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352@677f0c10"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
442+
<div class="sourceCode" id="cb10"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>#object[clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352 <span class="bn">0x11ad162d</span> <span class="st">"clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352@11ad162d"</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
437443
</div>
438444
<p>Yikes! what an eyesore. This is not an academic issue specific to lambda calculus. Any function created from inside a function is helpfully identifiable through the <code>fn$fn</code> nesting. We create these quite regularly, and they are often printed in stack traces. I’m sure you have seen them when you map an inline function across a seq, and there is a bug in the anonymous function.</p>
439445
<div class="sourceClojure">
@@ -495,7 +501,7 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
495501
<div class="printedClojure">
496502
<div class="sourceCode" id="cb22"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="st">"fn$fn"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
497503
</div>
498-
<p>So short, so sweet.</p>
504+
<p>So short, so sweet. If it’s a function, why call it an object?</p>
499505
<div class="sourceClojure">
500506
<div class="sourceCode" id="cb23"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a>(<span class="bu">defn</span><span class="fu"> object-str </span>^String [x]</span>
501507
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a> (<span class="kw">str</span> (<span class="kw">if</span> (<span class="kw">fn?</span> x) <span class="st">"#fn"</span> <span class="st">"#object"</span>)</span>

code_interview/beating/with_stupid_stuff/z_combinator_gambit.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ <h1 class="title">The Z-Combinator Gambit</h1>
490490
<blockquote class="blockquote">
491491
<p>That’s a confusing way to write it</p>
492492
</blockquote>
493-
<p>Quite right, because it’s not obvious what (SELF SELF) is. We need to extract it out. What we want is:</p>
493+
<p>Quite right, because it’s not obvious what <code>(SELF SELF)</code> is. We need to extract it out. What we want is:</p>
494494
<div class="sourceClojure">
495495
<div class="sourceCode" id="cb11"><pre class="sourceCode clojure code-with-copy"><code class="sourceCode clojure"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>(<span class="bu">def</span><span class="fu"> REV-LOGIC</span></span>
496496
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a> (<span class="kw">fn</span> [SELF]</span>

0 commit comments

Comments
 (0)