Browse code
feat: improve hashtable printer
Ed Langley authored on 29/10/2020 23:26:31
Showing 3 changed files
Showing 3 changed files
... | ... |
@@ -3,7 +3,7 @@ |
3 | 3 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
4 | 4 |
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
5 | 5 |
<head> |
6 |
-<!-- 2019-09-10 Tue 16:30 --> |
|
6 |
+<!-- 2019-09-25 Wed 21:02 --> |
|
7 | 7 |
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> |
8 | 8 |
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
9 | 9 |
<title>TODO backend implementation using CL and fukamachi/ningle</title> |
... | ... |
@@ -300,34 +300,34 @@ for the JavaScript code in this tag. |
300 | 300 |
<h2>Table of Contents</h2> |
301 | 301 |
<div id="text-table-of-contents"> |
302 | 302 |
<ul> |
303 |
-<li><a href="#org2c60c2a">1. Setup</a></li> |
|
304 |
-<li><a href="#org8b48160">2. todo API</a> |
|
303 |
+<li><a href="#org9cdd67c">1. Setup</a></li> |
|
304 |
+<li><a href="#org4320cff">2. todo API</a> |
|
305 | 305 |
<ul> |
306 |
-<li><a href="#orgddfdad7">2.1. List-level APIs</a></li> |
|
307 |
-<li><a href="#orge78579a">2.2. Getting/Replacing a todo</a></li> |
|
308 |
-<li><a href="#org1d8273a">2.3. Adding and modifying todos</a></li> |
|
309 |
-<li><a href="#orgd06e313">2.4. Examples</a></li> |
|
306 |
+<li><a href="#org0212081">2.1. List-level APIs</a></li> |
|
307 |
+<li><a href="#org4f066d5">2.2. Getting/Replacing a todo</a></li> |
|
308 |
+<li><a href="#orge9f5122">2.3. Adding and modifying todos</a></li> |
|
309 |
+<li><a href="#org745149a">2.4. Examples</a></li> |
|
310 | 310 |
</ul> |
311 | 311 |
</li> |
312 |
-<li><a href="#orgf16a59b">3. Routing</a> |
|
312 |
+<li><a href="#orgc967bea">3. Routing</a> |
|
313 | 313 |
<ul> |
314 |
-<li><a href="#org8fa2aba">3.1. Routing utilities</a></li> |
|
315 |
-<li><a href="#org104511b">3.2. todo routes</a></li> |
|
314 |
+<li><a href="#org43beaea">3.1. Routing utilities</a></li> |
|
315 |
+<li><a href="#org1b71e8e">3.2. todo routes</a></li> |
|
316 | 316 |
</ul> |
317 | 317 |
</li> |
318 |
-<li><a href="#org27ea61c">4. Source</a> |
|
318 |
+<li><a href="#orga9b0a0d">4. Source</a> |
|
319 | 319 |
<ul> |
320 |
-<li><a href="#orgc9b940b">4.1. model.lisp source code</a></li> |
|
321 |
-<li><a href="#orge55bf4b">4.2. routing.lisp source</a></li> |
|
322 |
-<li><a href="#org714745a">4.3. main.lisp source</a></li> |
|
320 |
+<li><a href="#org87d2e6f">4.1. model.lisp source code</a></li> |
|
321 |
+<li><a href="#org8641414">4.2. routing.lisp source</a></li> |
|
322 |
+<li><a href="#org99a4e68">4.3. main.lisp source</a></li> |
|
323 | 323 |
</ul> |
324 | 324 |
</li> |
325 | 325 |
</ul> |
326 | 326 |
</div> |
327 | 327 |
</div> |
328 | 328 |
|
329 |
-<div id="outline-container-org2c60c2a" class="outline-2"> |
|
330 |
-<h2 id="org2c60c2a"><span class="section-number-2">1</span> Setup</h2> |
|
329 |
+<div id="outline-container-org9cdd67c" class="outline-2"> |
|
330 |
+<h2 id="org9cdd67c"><span class="section-number-2">1</span> Setup</h2> |
|
331 | 331 |
<div class="outline-text-2" id="text-1"> |
332 | 332 |
<ul class="org-ul"> |
333 | 333 |
<li><code class="src src-sh">git clone https://github.com/fiddlerwoaroof/data-lens.git ~/quicklisp/local-projects/data-lens</code></li> |
... | ... |
@@ -347,8 +347,8 @@ After this, all the tests <a href="http://www.todobackend.com/specs/index.html?h |
347 | 347 |
</div> |
348 | 348 |
</div> |
349 | 349 |
|
350 |
-<div id="outline-container-org8b48160" class="outline-2"> |
|
351 |
-<h2 id="org8b48160"><span class="section-number-2">2</span> todo API</h2> |
|
350 |
+<div id="outline-container-org4320cff" class="outline-2"> |
|
351 |
+<h2 id="org4320cff"><span class="section-number-2">2</span> todo API</h2> |
|
352 | 352 |
<div class="outline-text-2" id="text-2"> |
353 | 353 |
<p> |
354 | 354 |
We use a fairly simple structure for our "database": a fset map (a |
... | ... |
@@ -358,8 +358,8 @@ referenced as <code>*todo*</code>, but this is a detail hidden behind the API. |
358 | 358 |
</p> |
359 | 359 |
</div> |
360 | 360 |
|
361 |
-<div id="outline-container-orgddfdad7" class="outline-3"> |
|
362 |
-<h3 id="orgddfdad7"><span class="section-number-3">2.1</span> List-level APIs</h3> |
|
361 |
+<div id="outline-container-org0212081" class="outline-3"> |
|
362 |
+<h3 id="org0212081"><span class="section-number-3">2.1</span> List-level APIs</h3> |
|
363 | 363 |
<div class="outline-text-3" id="text-2-1"> |
364 | 364 |
<p> |
365 | 365 |
These are functions for getting the todo list and clearing |
... | ... |
@@ -368,7 +368,7 @@ and <code>clear-todos</code> for DELETE requests. |
368 | 368 |
</p> |
369 | 369 |
|
370 | 370 |
<div class="org-src-container"> |
371 |
-<pre class="src src-lisp" id="org2fa86a6"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todos</span> <span style="color: #93a8c6;">()</span> |
|
371 |
+<pre class="src src-lisp" id="org96c36b7"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todos</span> <span style="color: #93a8c6;">()</span> |
|
372 | 372 |
<span style="color: #93a8c6;">(</span>gmap:gmap <span style="font-weight: bold;">:seq</span> |
373 | 373 |
<span style="color: #b0b1a3;">(</span><span style="color: #F0DFAF;">lambda</span> <span style="color: #97b098;">(</span>_ b<span style="color: #97b098;">)</span> |
374 | 374 |
<span style="color: #97b098;">(</span><span style="color: #F0DFAF;">declare</span> <span style="color: #aebed8;">(</span>ignore _<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span> |
... | ... |
@@ -383,8 +383,8 @@ and <code>clear-todos</code> for DELETE requests. |
383 | 383 |
</div> |
384 | 384 |
</div> |
385 | 385 |
|
386 |
-<div id="outline-container-orge78579a" class="outline-3"> |
|
387 |
-<h3 id="orge78579a"><span class="section-number-3">2.2</span> Getting/Replacing a todo</h3> |
|
386 |
+<div id="outline-container-org4f066d5" class="outline-3"> |
|
387 |
+<h3 id="org4f066d5"><span class="section-number-3">2.2</span> Getting/Replacing a todo</h3> |
|
388 | 388 |
<div class="outline-text-3" id="text-2-2"> |
389 | 389 |
<p> |
390 | 390 |
This uses lisp's <a href="http://www.lispworks.com/documentation/HyperSpec/Body/05_a.htm">generalized references</a> to abstract away the |
... | ... |
@@ -394,7 +394,7 @@ the GET request for a specific todo by id. |
394 | 394 |
</p> |
395 | 395 |
|
396 | 396 |
<div class="org-src-container"> |
397 |
-<pre class="src src-lisp" id="orge96683a"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todo</span> <span style="color: #93a8c6;">(</span>id<span style="color: #93a8c6;">)</span> |
|
397 |
+<pre class="src src-lisp" id="org8282374"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todo</span> <span style="color: #93a8c6;">(</span>id<span style="color: #93a8c6;">)</span> |
|
398 | 398 |
<span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">let</span> <span style="color: #b0b1a3;">(</span><span style="color: #97b098;">(</span>todo <span style="color: #aebed8;">(</span>fset:@ *todos* id<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span> |
399 | 399 |
todo<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span> |
400 | 400 |
|
... | ... |
@@ -410,8 +410,8 @@ the GET request for a specific todo by id. |
410 | 410 |
</div> |
411 | 411 |
</div> |
412 | 412 |
|
413 |
-<div id="outline-container-org1d8273a" class="outline-3"> |
|
414 |
-<h3 id="org1d8273a"><span class="section-number-3">2.3</span> Adding and modifying todos</h3> |
|
413 |
+<div id="outline-container-orge9f5122" class="outline-3"> |
|
414 |
+<h3 id="orge9f5122"><span class="section-number-3">2.3</span> Adding and modifying todos</h3> |
|
415 | 415 |
<div class="outline-text-3" id="text-2-3"> |
416 | 416 |
<p> |
417 | 417 |
<code>new-todo</code> is fairly trivial. It's main feature is that it has to |
... | ... |
@@ -421,7 +421,7 @@ properly. <code>new-todo</code> backs POST requests to the root endpoint. |
421 | 421 |
</p> |
422 | 422 |
|
423 | 423 |
<div class="org-src-container"> |
424 |
-<pre class="src src-lisp" id="orgf6c3a44"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-host*</span> |
|
424 |
+<pre class="src src-lisp" id="orgbeae4f5"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-host*</span> |
|
425 | 425 |
<span style="color: #D0BF8F;">"localhost"</span><span style="color: #8c8c8c;">)</span> |
426 | 426 |
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-port*</span> |
427 | 427 |
5000<span style="color: #8c8c8c;">)</span> |
... | ... |
@@ -450,7 +450,7 @@ todo endpoint for a specific ID. |
450 | 450 |
</p> |
451 | 451 |
|
452 | 452 |
<div class="org-src-container"> |
453 |
-<pre class="src src-lisp" id="org0a1e71e"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">update-todo</span> <span style="color: #93a8c6;">(</span>id v<span style="color: #93a8c6;">)</span> |
|
453 |
+<pre class="src src-lisp" id="orgc65925d"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">update-todo</span> <span style="color: #93a8c6;">(</span>id v<span style="color: #93a8c6;">)</span> |
|
454 | 454 |
<span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">let*</span> <span style="color: #b0b1a3;">(</span><span style="color: #97b098;">(</span>old-todo <span style="color: #aebed8;">(</span>or <span style="color: #b0b0b3;">(</span>todo id<span style="color: #b0b0b3;">)</span> |
455 | 455 |
<span style="color: #b0b0b3;">(</span>make-hash-table <span style="font-weight: bold;">:test</span> 'equal<span style="color: #b0b0b3;">)</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span> |
456 | 456 |
<span style="color: #97b098;">(</span>in-hash-table <span style="color: #aebed8;">(</span>alexandria:alist-hash-table v <span style="font-weight: bold;">:test</span> 'equal<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span> |
... | ... |
@@ -465,8 +465,8 @@ todo endpoint for a specific ID. |
465 | 465 |
</div> |
466 | 466 |
</div> |
467 | 467 |
|
468 |
-<div id="outline-container-orgd06e313" class="outline-3"> |
|
469 |
-<h3 id="orgd06e313"><span class="section-number-3">2.4</span> Examples</h3> |
|
468 |
+<div id="outline-container-org745149a" class="outline-3"> |
|
469 |
+<h3 id="org745149a"><span class="section-number-3">2.4</span> Examples</h3> |
|
470 | 470 |
<div class="outline-text-3" id="text-2-4"> |
471 | 471 |
<div class="org-src-container"> |
472 | 472 |
<pre class="src src-lisp"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">in-package</span> <span style="font-weight: bold;">:fwoar.todo</span><span style="color: #8c8c8c;">)</span> |
... | ... |
@@ -481,10 +481,10 @@ todo endpoint for a specific ID. |
481 | 481 |
</div> |
482 | 482 |
|
483 | 483 |
<pre class="example"> |
484 |
-(#<hash-table "url": "http://localhost:5000/todo/9", |
|
484 |
+(#<hash-table "url": "http://localhost:5000/todo/1", |
|
485 | 485 |
"title": "get groceries", |
486 | 486 |
"completed": YASON:FALSE> |
487 |
- #<hash-table "url": "http://localhost:5000/todo/10", |
|
487 |
+ #<hash-table "url": "http://localhost:5000/todo/2", |
|
488 | 488 |
"title": "write-better-documentation", |
489 | 489 |
"completed": YASON:FALSE>) |
490 | 490 |
</pre> |
... | ... |
@@ -492,13 +492,12 @@ todo endpoint for a specific ID. |
492 | 492 |
</div> |
493 | 493 |
</div> |
494 | 494 |
|
495 |
- |
|
496 |
-<div id="outline-container-orgf16a59b" class="outline-2"> |
|
497 |
-<h2 id="orgf16a59b"><span class="section-number-2">3</span> Routing</h2> |
|
495 |
+<div id="outline-container-orgc967bea" class="outline-2"> |
|
496 |
+<h2 id="orgc967bea"><span class="section-number-2">3</span> Routing</h2> |
|
498 | 497 |
<div class="outline-text-2" id="text-3"> |
499 | 498 |
</div> |
500 |
-<div id="outline-container-org8fa2aba" class="outline-3"> |
|
501 |
-<h3 id="org8fa2aba"><span class="section-number-3">3.1</span> Routing utilities</h3> |
|
499 |
+<div id="outline-container-org43beaea" class="outline-3"> |
|
500 |
+<h3 id="org43beaea"><span class="section-number-3">3.1</span> Routing utilities</h3> |
|
502 | 501 |
<div class="outline-text-3" id="text-3-1"> |
503 | 502 |
<p> |
504 | 503 |
The core utility here is the <code>defroutes</code> macro. This takes a |
... | ... |
@@ -508,7 +507,7 @@ routes. |
508 | 507 |
</p> |
509 | 508 |
|
510 | 509 |
<div class="org-src-container"> |
511 |
-<pre class="src src-lisp" id="org2c1405a"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">defroutes</span> <span style="color: #93a8c6;">(</span>app <span style="color: #CC9393;">&body</span> routes<span style="color: #93a8c6;">)</span> |
|
510 |
+<pre class="src src-lisp" id="orgd30e492"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">defroutes</span> <span style="color: #93a8c6;">(</span>app <span style="color: #CC9393;">&body</span> routes<span style="color: #93a8c6;">)</span> |
|
512 | 511 |
<span style="color: #93a8c6;">(</span>alexandria:once-only <span style="color: #b0b1a3;">(</span>app<span style="color: #b0b1a3;">)</span> |
513 | 512 |
`<span style="color: #b0b1a3;">(</span>setf |
514 | 513 |
,@<span style="color: #97b098;">(</span><span style="color: #F0DFAF;">loop</span> for <span style="color: #aebed8;">(</span>target . descriptors<span style="color: #aebed8;">)</span> in routes |
... | ... |
@@ -552,7 +551,7 @@ that all the API results get JSON encoded. |
552 | 551 |
</p> |
553 | 552 |
|
554 | 553 |
<div class="org-src-container"> |
555 |
-<pre class="src src-lisp" id="orgd63e2a0"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">success</span> <span style="color: #93a8c6;">(</span>value<span style="color: #93a8c6;">)</span> |
|
554 |
+<pre class="src src-lisp" id="org4594387"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">success</span> <span style="color: #93a8c6;">(</span>value<span style="color: #93a8c6;">)</span> |
|
556 | 555 |
<span style="color: #93a8c6;">(</span>list 200 '<span style="color: #b0b1a3;">(</span><span style="font-weight: bold;">:conent-type</span> <span style="color: #D0BF8F;">"application/json"</span><span style="color: #b0b1a3;">)</span> value<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span> |
557 | 556 |
|
558 | 557 |
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">handler</span> <span style="color: #93a8c6;">(</span><span style="color: #b0b1a3;">(</span><span style="color: #CC9393;">&optional</span> <span style="color: #97b098;">(</span>sym <span style="color: #aebed8;">(</span>gensym <span style="color: #D0BF8F;">"PARAMS"</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span> <span style="color: #CC9393;">&body</span> body<span style="color: #93a8c6;">)</span> |
... | ... |
@@ -566,8 +565,8 @@ that all the API results get JSON encoded. |
566 | 565 |
</div> |
567 | 566 |
</div> |
568 | 567 |
|
569 |
-<div id="outline-container-org104511b" class="outline-3"> |
|
570 |
-<h3 id="org104511b"><span class="section-number-3">3.2</span> todo routes</h3> |
|
568 |
+<div id="outline-container-org1b71e8e" class="outline-3"> |
|
569 |
+<h3 id="org1b71e8e"><span class="section-number-3">3.2</span> todo routes</h3> |
|
571 | 570 |
<div class="outline-text-3" id="text-3-2"> |
572 | 571 |
<p> |
573 | 572 |
<code>setup-routes</code> binds the endpoints to handlers: <code>"/"</code> to handlers |
... | ... |
@@ -579,7 +578,7 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id |
579 | 578 |
</p> |
580 | 579 |
|
581 | 580 |
<div class="org-src-container"> |
582 |
-<pre class="src src-lisp" id="org8c6228c"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">routing</span> |
|
581 |
+<pre class="src src-lisp" id="org148c9f4"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">routing</span> |
|
583 | 582 |
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">get-id</span> <span style="color: #93a8c6;">(</span>params<span style="color: #93a8c6;">)</span> |
584 | 583 |
<span style="color: #93a8c6;">(</span>parse-integer <span style="color: #b0b1a3;">(</span>serapeum:assocdr <span style="font-weight: bold;">:id</span> params<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span> |
585 | 584 |
|
... | ... |
@@ -601,12 +600,12 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id |
601 | 600 |
</div> |
602 | 601 |
</div> |
603 | 602 |
|
604 |
-<div id="outline-container-org27ea61c" class="outline-2"> |
|
605 |
-<h2 id="org27ea61c"><span class="section-number-2">4</span> Source</h2> |
|
603 |
+<div id="outline-container-orga9b0a0d" class="outline-2"> |
|
604 |
+<h2 id="orga9b0a0d"><span class="section-number-2">4</span> Source</h2> |
|
606 | 605 |
<div class="outline-text-2" id="text-4"> |
607 | 606 |
</div> |
608 |
-<div id="outline-container-orgc9b940b" class="outline-3"> |
|
609 |
-<h3 id="orgc9b940b"><span class="section-number-3">4.1</span> model.lisp source code</h3> |
|
607 |
+<div id="outline-container-org87d2e6f" class="outline-3"> |
|
608 |
+<h3 id="org87d2e6f"><span class="section-number-3">4.1</span> model.lisp source code</h3> |
|
610 | 609 |
<div class="outline-text-3" id="text-4-1"> |
611 | 610 |
<div class="org-src-container"> |
612 | 611 |
<pre class="src src-lisp"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">[[file:~/git_repos/lisp-sandbox/todo/README.org::package-include][package-include]]</span> |
... | ... |
@@ -698,8 +697,8 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id |
698 | 697 |
</div> |
699 | 698 |
</div> |
700 | 699 |
|
701 |
-<div id="outline-container-orge55bf4b" class="outline-3"> |
|
702 |
-<h3 id="orge55bf4b"><span class="section-number-3">4.2</span> routing.lisp source</h3> |
|
700 |
+<div id="outline-container-org8641414" class="outline-3"> |
|
701 |
+<h3 id="org8641414"><span class="section-number-3">4.2</span> routing.lisp source</h3> |
|
703 | 702 |
<div class="outline-text-3" id="text-4-2"> |
704 | 703 |
<div class="org-src-container"> |
705 | 704 |
<pre class="src src-lisp"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">[[file:~/git_repos/lisp-sandbox/todo/README.org::package-include][package-include]]</span> |
... | ... |
@@ -753,8 +752,8 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id |
753 | 752 |
</div> |
754 | 753 |
</div> |
755 | 754 |
|
756 |
-<div id="outline-container-org714745a" class="outline-3"> |
|
757 |
-<h3 id="org714745a"><span class="section-number-3">4.3</span> main.lisp source</h3> |
|
755 |
+<div id="outline-container-org99a4e68" class="outline-3"> |
|
756 |
+<h3 id="org99a4e68"><span class="section-number-3">4.3</span> main.lisp source</h3> |
|
758 | 757 |
<div class="outline-text-3" id="text-4-3"> |
759 | 758 |
<div class="org-src-container"> |
760 | 759 |
<pre class="src src-lisp"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">in-package</span> <span style="font-weight: bold;">:fwoar.todo</span><span style="color: #8c8c8c;">)</span> |
... | ... |
@@ -805,7 +804,7 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id |
805 | 804 |
</div> |
806 | 805 |
<div id="postamble" class="status"> |
807 | 806 |
<p class="author">Author: Langley</p> |
808 |
-<p class="date">Created: 2019-09-10 Tue 16:30</p> |
|
807 |
+<p class="date">Created: 2019-09-25 Wed 21:02</p> |
|
809 | 808 |
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> |
810 | 809 |
</div> |
811 | 810 |
</body> |
... | ... |
@@ -1,18 +1,19 @@ |
1 | 1 |
(in-package :cl-user) |
2 |
-(defparameter *old-pprint-dispatch* *print-pprint-dispatch*) |
|
2 |
+(defvar *old-pprint-dispatch* *print-pprint-dispatch*) |
|
3 |
+ |
|
3 | 4 |
(setf *print-pprint-dispatch* |
4 | 5 |
(copy-pprint-dispatch *old-pprint-dispatch*)) |
5 | 6 |
|
6 | 7 |
(defun pprint-hashtable (s hash-table) |
7 | 8 |
(pprint-logical-block (s nil) |
8 |
- (princ "#<hash-table " s) |
|
9 |
+ (princ "#<hash-table" s) |
|
9 | 10 |
(let ((v (fset:convert 'list (fset:convert 'fset:map hash-table)))) |
10 | 11 |
(when v |
11 | 12 |
(pprint-logical-block (s v) |
12 | 13 |
(pprint-indent :block 0 s) |
13 | 14 |
(loop do |
14 | 15 |
(destructuring-bind (key . value) (pprint-pop) |
15 |
- (format s "~s: ~s" key value) |
|
16 |
+ (format s " ~s: ~s" key value) |
|
16 | 17 |
(pprint-exit-if-list-exhausted) |
17 | 18 |
(princ ", " s) |
18 | 19 |
(pprint-newline :mandatory s)))))) |