Lots of new unit tests.

This commit is contained in:
Simon Brooke 2023-04-11 15:18:52 +01:00
parent 01e4572119
commit 7c4d3668a8
26 changed files with 866 additions and 1128 deletions

View file

@ -130,19 +130,19 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;[symbol] 042&nbsp;&nbsp;&nbsp;&nbsp;[symbol]
</span><br/> </span><br/>
<span class="partial" title="4 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:strict&nbsp;*options*) 043&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:strict&nbsp;*options*)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 7 forms covered"> <span class="covered" title="7 out of 7 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(format&nbsp;&quot;%s&nbsp;ne&nbsp;āfand&nbsp;innan&nbsp;Lisp&nbsp;1.5&quot;&nbsp;symbol) 044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(format&nbsp;&quot;%s&nbsp;ne&nbsp;āfand&nbsp;innan&nbsp;Lisp&nbsp;1.5&quot;&nbsp;symbol)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:type&nbsp;:strict 045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:type&nbsp;:strict
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:phase&nbsp;:host 046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:phase&nbsp;:host
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;symbol}))) 047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;symbol})))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -283,19 +283,19 @@
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;path)&nbsp;l 093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;path)&nbsp;l
</span><br/> </span><br/>
<span class="partial" title="6 out of 13 forms covered"> <span class="covered" title="13 out of 13 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(instance?&nbsp;ConsCell&nbsp;l))&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;Ne&nbsp;liste:&nbsp;&quot; 094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(instance?&nbsp;ConsCell&nbsp;l))&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;Ne&nbsp;liste:&nbsp;&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;&quot;;&nbsp;&quot;&nbsp;(type&nbsp;l)) 095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;&quot;;&nbsp;&quot;&nbsp;(type&nbsp;l))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval 096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot; 097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path] 098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -310,19 +310,19 @@
<span class="covered" title="6 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d&nbsp;(uaf&nbsp;(.getCdr&nbsp;l)&nbsp;(butlast&nbsp;path)) 102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d&nbsp;(uaf&nbsp;(.getCdr&nbsp;l)&nbsp;(butlast&nbsp;path))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;uaf:&nbsp;unexpected&nbsp;letter&nbsp;in&nbsp;path&nbsp;(only&nbsp;`a`&nbsp;and&nbsp;`d`&nbsp;permitted):&nbsp;&quot; 103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;uaf:&nbsp;unexpected&nbsp;letter&nbsp;in&nbsp;path&nbsp;(only&nbsp;`a`&nbsp;and&nbsp;`d`&nbsp;permitted):&nbsp;&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last&nbsp;path)) 104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last&nbsp;path))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval 105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot; 106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path] 107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -568,7 +568,7 @@
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if 188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/> </span><br/>
<span class="partial" title="11 out of 13 forms covered"> <span class="partial" title="12 out of 13 forms covered">
189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or 189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
@ -580,7 +580,7 @@
<span class="covered" title="3 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;value) 192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;value)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;value&nbsp;NIL)) 193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;value&nbsp;NIL))
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
@ -619,13 +619,13 @@
<span class="not-covered" title="0 out of 1 forms covered"> <span class="not-covered" title="0 out of 1 forms covered">
205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any)))) 205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any))))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info 206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="covered" title="9 out of 9 forms covered">
207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Un-ġefōg&nbsp;þing&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;value&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;value)&nbsp;&quot;)&quot;) 207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Un-ġefōg&nbsp;þing&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;value&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;value)&nbsp;&quot;)&quot;)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 10 forms covered"> <span class="covered" title="10 out of 10 forms covered">
208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-value 208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-value
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -634,19 +634,19 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;:rplacd 210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;:rplacd
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value) 211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:beowulf}))) 212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:beowulf})))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info 213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="covered" title="9 out of 9 forms covered">
214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Uncynlic&nbsp;miercels&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;cell&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;cell)&nbsp;&quot;)&quot;) 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Uncynlic&nbsp;miercels&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;cell&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;cell)&nbsp;&quot;)&quot;)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 10 forms covered"> <span class="covered" title="10 out of 10 forms covered">
215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-cell 215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-cell
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -655,7 +655,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:detail&nbsp;:rplacd 217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:detail&nbsp;:rplacd
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value) 218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -682,7 +682,7 @@
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
226&nbsp;&nbsp; 226&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="partial" title="5 out of 36 forms covered"> <span class="covered" title="36 out of 36 forms covered">
227&nbsp;&nbsp;(defmacro&nbsp;NULL 227&nbsp;&nbsp;(defmacro&nbsp;NULL
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -691,13 +691,13 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
229&nbsp;&nbsp;&nbsp;&nbsp;[x] 229&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
230&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;F)) 230&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;F))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
231&nbsp;&nbsp; 231&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="partial" title="5 out of 36 forms covered"> <span class="covered" title="36 out of 36 forms covered">
232&nbsp;&nbsp;(defmacro&nbsp;NILP 232&nbsp;&nbsp;(defmacro&nbsp;NILP
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -706,7 +706,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
234&nbsp;&nbsp;&nbsp;&nbsp;[x] 234&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
235&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;NIL)) 235&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;NIL))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -847,13 +847,13 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
281&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args))) 281&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args)))
</span><br/> </span><br/>
<span class="partial" title="5 out of 7 forms covered"> <span class="partial" title="6 out of 7 forms covered">
282&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;T 282&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;T
</span><br/> </span><br/>
<span class="covered" title="14 out of 14 forms covered"> <span class="covered" title="14 out of 14 forms covered">
283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;F&nbsp;T) 283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;F&nbsp;T)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;T)) 284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;T))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -889,13 +889,13 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
295&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args))) 295&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args)))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 7 forms covered"> <span class="partial" title="6 out of 7 forms covered">
296&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;F 296&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;F
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 14 forms covered"> <span class="covered" title="14 out of 14 forms covered">
297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;T&nbsp;F) 297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;T&nbsp;F)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;F)) 298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;F))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1078,7 +1078,7 @@
<span class="covered" title="5 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
358&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[p&nbsp;(apply&nbsp;*&nbsp;args)] 358&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[p&nbsp;(apply&nbsp;*&nbsp;args)]
</span><br/> </span><br/>
<span class="partial" title="5 out of 7 forms covered"> <span class="covered" title="7 out of 7 forms covered">
359&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;p)&nbsp;p&nbsp;(float&nbsp;p)))) 359&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;p)&nbsp;p&nbsp;(float&nbsp;p))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1093,7 +1093,7 @@
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
363&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[d&nbsp;(-&nbsp;x&nbsp;y)] 363&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[d&nbsp;(-&nbsp;x&nbsp;y)]
</span><br/> </span><br/>
<span class="partial" title="5 out of 7 forms covered"> <span class="covered" title="7 out of 7 forms covered">
364&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;d)&nbsp;d&nbsp;(float&nbsp;d)))) 364&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;d)&nbsp;d&nbsp;(float&nbsp;d))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1153,7 +1153,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
383&nbsp;&nbsp;&nbsp;&nbsp;[x] 383&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
384&nbsp;&nbsp;&nbsp;&nbsp;(dec&nbsp;x)) 384&nbsp;&nbsp;&nbsp;&nbsp;(dec&nbsp;x))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1165,7 +1165,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
387&nbsp;&nbsp;&nbsp;&nbsp;[x] 387&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
388&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;x)&nbsp;T&nbsp;F)) 388&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;x)&nbsp;T&nbsp;F))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1189,7 +1189,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
395&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y] 395&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
396&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&lt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F)) 396&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&lt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1201,7 +1201,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
399&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y] 399&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
400&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&gt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F)) 400&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&gt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1237,7 +1237,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
411&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;args] 411&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;args]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 14 forms covered"> <span class="covered" title="14 out of 14 forms covered">
412&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;&quot;LISP&nbsp;STÆFLEAHTER&quot;&nbsp;{:args&nbsp;args 412&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;&quot;LISP&nbsp;STÆFLEAHTER&quot;&nbsp;{:args&nbsp;args
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
@ -1249,7 +1249,7 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:lisp 415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:lisp
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:code&nbsp;(or&nbsp;(first&nbsp;args)&nbsp;&#x27;A1)}))) 416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:code&nbsp;(or&nbsp;(first&nbsp;args)&nbsp;&#x27;A1)})))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
@ -1334,7 +1334,7 @@
443&nbsp;&nbsp;&nbsp;&nbsp;[target&nbsp;plist] 443&nbsp;&nbsp;&nbsp;&nbsp;[target&nbsp;plist]
</span><br/> </span><br/>
<span class="covered" title="13 out of 13 forms covered"> <span class="covered" title="13 out of 13 forms covered">
444&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;(instance?&nbsp;ConsCell&nbsp;plist)(even?&nbsp;(count&nbsp;plist))) 444&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;(instance?&nbsp;ConsCell&nbsp;plist)&nbsp;(even?&nbsp;(count&nbsp;plist)))
</span><br/> </span><br/>
<span class="partial" title="6 out of 7 forms covered"> <span class="partial" title="6 out of 7 forms covered">
445&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;plist&nbsp;NIL)&nbsp;NIL 445&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;plist&nbsp;NIL)&nbsp;NIL
@ -1558,215 +1558,218 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
518&nbsp;&nbsp;&nbsp;&nbsp;[a-list&nbsp;indicator] 518&nbsp;&nbsp;&nbsp;&nbsp;[a-list&nbsp;indicator]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 2 forms covered">
519&nbsp;&nbsp;&nbsp;&nbsp;(map 519&nbsp;&nbsp;&nbsp;&nbsp;(doall
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
520&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(PUT&nbsp;(CAR&nbsp;%)&nbsp;indicator&nbsp;(CDR&nbsp;%)) 520&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(when&nbsp;(PUT&nbsp;(CAR&nbsp;%)&nbsp;indicator&nbsp;(CDR&nbsp;%))&nbsp;(CAR&nbsp;%))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="not-covered" title="0 out of 1 forms covered">
521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a-list)) 522&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a-list)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
522&nbsp;&nbsp; 523&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
523&nbsp;&nbsp;(defn&nbsp;DEFINE 524&nbsp;&nbsp;(defn&nbsp;DEFINE
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
524&nbsp;&nbsp;&nbsp;&nbsp;&quot;Bootstrap-only&nbsp;version&nbsp;of&nbsp;`DEFINE`&nbsp;which,&nbsp;post&nbsp;boostrap,&nbsp;can&nbsp;be&nbsp;overwritten&nbsp; 525&nbsp;&nbsp;&nbsp;&nbsp;&quot;Bootstrap-only&nbsp;version&nbsp;of&nbsp;`DEFINE`&nbsp;which,&nbsp;post&nbsp;boostrap,&nbsp;can&nbsp;be&nbsp;overwritten&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
525&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;LISP.&nbsp; 526&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;LISP.&nbsp;
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
526&nbsp;&nbsp; 527&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
527&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;single&nbsp;argument&nbsp;to&nbsp;`DEFINE`&nbsp;should&nbsp;be&nbsp;an&nbsp;association&nbsp;list&nbsp;of&nbsp;symbols&nbsp;to 528&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;single&nbsp;argument&nbsp;to&nbsp;`DEFINE`&nbsp;should&nbsp;be&nbsp;an&nbsp;association&nbsp;list&nbsp;of&nbsp;symbols&nbsp;to
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
528&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda&nbsp;functions.&nbsp;See&nbsp;page&nbsp;58&nbsp;of&nbsp;the&nbsp;manual.&quot; 529&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda&nbsp;functions.&nbsp;See&nbsp;page&nbsp;58&nbsp;of&nbsp;the&nbsp;manual.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
529&nbsp;&nbsp;&nbsp;&nbsp;[a-list] 530&nbsp;&nbsp;&nbsp;&nbsp;[a-list]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
530&nbsp;&nbsp;&nbsp;&nbsp;(DEFLIST&nbsp;a-list&nbsp;&#x27;EXPR)) 531&nbsp;&nbsp;&nbsp;&nbsp;(DEFLIST&nbsp;a-list&nbsp;&#x27;EXPR))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
531&nbsp;&nbsp; 532&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
532&nbsp;&nbsp;(defn&nbsp;SET 533&nbsp;&nbsp;(defn&nbsp;SET
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
533&nbsp;&nbsp;&nbsp;&nbsp;&quot;Implementation&nbsp;of&nbsp;SET&nbsp;in&nbsp;Clojure.&nbsp;Add&nbsp;to&nbsp;the&nbsp;`oblist`&nbsp;a&nbsp;binding&nbsp;of&nbsp;the 534&nbsp;&nbsp;&nbsp;&nbsp;&quot;Implementation&nbsp;of&nbsp;SET&nbsp;in&nbsp;Clojure.&nbsp;Add&nbsp;to&nbsp;the&nbsp;`oblist`&nbsp;a&nbsp;binding&nbsp;of&nbsp;the
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
534&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;of&nbsp;`var`&nbsp;to&nbsp;the&nbsp;value&nbsp;of&nbsp;`val`.&nbsp;NOTE&nbsp;WELL:&nbsp;this&nbsp;is&nbsp;not&nbsp;SETQ!&quot; 535&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;of&nbsp;`var`&nbsp;to&nbsp;the&nbsp;value&nbsp;of&nbsp;`val`.&nbsp;NOTE&nbsp;WELL:&nbsp;this&nbsp;is&nbsp;not&nbsp;SETQ!&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
535&nbsp;&nbsp;&nbsp;&nbsp;[symbol&nbsp;val] 536&nbsp;&nbsp;&nbsp;&nbsp;[symbol&nbsp;val]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 5 forms covered">
536&nbsp;&nbsp;&nbsp;&nbsp;(PUT&nbsp;symbol&nbsp;&#x27;APVAL&nbsp;val)) 537&nbsp;&nbsp;&nbsp;&nbsp;(PUT&nbsp;symbol&nbsp;&#x27;APVAL&nbsp;val))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
537&nbsp;&nbsp; 538&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
538&nbsp;&nbsp;;;;;&nbsp;TRACE&nbsp;and&nbsp;friends&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 539&nbsp;&nbsp;;;;;&nbsp;TRACE&nbsp;and&nbsp;friends&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
539&nbsp;&nbsp; 540&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
540&nbsp;&nbsp;(def&nbsp;traced-symbols 541&nbsp;&nbsp;(def&nbsp;traced-symbols
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
541&nbsp;&nbsp;&nbsp;&nbsp;&quot;Symbols&nbsp;currently&nbsp;being&nbsp;traced.&quot; 542&nbsp;&nbsp;&nbsp;&nbsp;&quot;Symbols&nbsp;currently&nbsp;being&nbsp;traced.&quot;
</span><br/> </span><br/>
<span class="covered" title="3 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
542&nbsp;&nbsp;&nbsp;&nbsp;(atom&nbsp;#{})) 543&nbsp;&nbsp;&nbsp;&nbsp;(atom&nbsp;#{}))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
543&nbsp;&nbsp; 544&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
544&nbsp;&nbsp;(defn&nbsp;traced? 545&nbsp;&nbsp;(defn&nbsp;traced?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
545&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;iff&nbsp;`s`&nbsp;is&nbsp;a&nbsp;symbol&nbsp;currently&nbsp;being&nbsp;traced,&nbsp;else&nbsp;`nil`.&quot; 546&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;iff&nbsp;`s`&nbsp;is&nbsp;a&nbsp;symbol&nbsp;currently&nbsp;being&nbsp;traced,&nbsp;else&nbsp;`nil`.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
546&nbsp;&nbsp;&nbsp;&nbsp;[s] 547&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/> </span><br/>
<span class="partial" title="7 out of 8 forms covered"> <span class="partial" title="7 out of 8 forms covered">
547&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(contains?&nbsp;@traced-symbols&nbsp;s) 548&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(contains?&nbsp;@traced-symbols&nbsp;s)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
548&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Throwable&nbsp;_&nbsp;nil))) 549&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Throwable&nbsp;_&nbsp;nil)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
549&nbsp;&nbsp; 550&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
550&nbsp;&nbsp;(defn&nbsp;TRACE 551&nbsp;&nbsp;(defn&nbsp;TRACE
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
551&nbsp;&nbsp;&nbsp;&nbsp;&quot;Add&nbsp;this&nbsp;`s`&nbsp;to&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s` 552&nbsp;&nbsp;&nbsp;&nbsp;&quot;Add&nbsp;this&nbsp;`s`&nbsp;to&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot; 553&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
553&nbsp;&nbsp;&nbsp;&nbsp;[s] 554&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
554&nbsp;&nbsp;&nbsp;&nbsp;(swap!&nbsp;traced-symbols 555&nbsp;&nbsp;&nbsp;&nbsp;(swap!&nbsp;traced-symbols
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
555&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(cond 556&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(cond
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 7 forms covered"> <span class="not-covered" title="0 out of 7 forms covered">
556&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(conj&nbsp;%&nbsp;s) 557&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(conj&nbsp;%&nbsp;s)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 17 forms covered"> <span class="not-covered" title="0 out of 17 forms covered">
557&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(union&nbsp;%&nbsp;(set&nbsp;s)) 558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(union&nbsp;%&nbsp;(set&nbsp;s))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;%))) 559&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;%)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
559&nbsp;&nbsp; 560&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="partial" title="1 out of 3 forms covered"> <span class="partial" title="1 out of 3 forms covered">
560&nbsp;&nbsp;(defn&nbsp;UNTRACE 561&nbsp;&nbsp;(defn&nbsp;UNTRACE
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
561&nbsp;&nbsp;&nbsp;&nbsp;&quot;Remove&nbsp;this&nbsp;`s`&nbsp;from&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s` 562&nbsp;&nbsp;&nbsp;&nbsp;&quot;Remove&nbsp;this&nbsp;`s`&nbsp;from&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
562&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot; 563&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
563&nbsp;&nbsp;&nbsp;&nbsp;[s] 564&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
564&nbsp;&nbsp;&nbsp;&nbsp;(cond 565&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 16 forms covered"> <span class="not-covered" title="0 out of 16 forms covered">
565&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(swap!&nbsp;traced-symbols&nbsp;#(set&nbsp;(remove&nbsp;(fn&nbsp;[x]&nbsp;(=&nbsp;s&nbsp;x))&nbsp;%))) 566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(swap!&nbsp;traced-symbols&nbsp;#(set&nbsp;(remove&nbsp;(fn&nbsp;[x]&nbsp;(=&nbsp;s&nbsp;x))&nbsp;%)))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 15 forms covered"> <span class="not-covered" title="0 out of 15 forms covered">
566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(map&nbsp;UNTRACE&nbsp;s)) 567&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(map&nbsp;UNTRACE&nbsp;s))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="not-covered" title="0 out of 1 forms covered">
567&nbsp;&nbsp;&nbsp;&nbsp;@traced-symbols) 568&nbsp;&nbsp;&nbsp;&nbsp;@traced-symbols)
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
568&nbsp;&nbsp; 569&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
569&nbsp;&nbsp;;;;;&nbsp;Extensions&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 570&nbsp;&nbsp;;;;;&nbsp;Extensions&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
570&nbsp;&nbsp; 571&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
571&nbsp;&nbsp;(defn&nbsp;DOC 572&nbsp;&nbsp;(defn&nbsp;DOC
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
572&nbsp;&nbsp;&nbsp;&nbsp;&quot;Open&nbsp;the&nbsp;page&nbsp;for&nbsp;this&nbsp;`symbol`&nbsp;in&nbsp;the&nbsp;Lisp&nbsp;1.5&nbsp;manual,&nbsp;if&nbsp;known,&nbsp;in&nbsp;the&nbsp; 573&nbsp;&nbsp;&nbsp;&nbsp;&quot;Open&nbsp;the&nbsp;page&nbsp;for&nbsp;this&nbsp;`symbol`&nbsp;in&nbsp;the&nbsp;Lisp&nbsp;1.5&nbsp;manual,&nbsp;if&nbsp;known,&nbsp;in&nbsp;the&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
573&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;web&nbsp;browser. 574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;web&nbsp;browser.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 575&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
575&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&quot; 576&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
576&nbsp;&nbsp;&nbsp;&nbsp;[symbol] 577&nbsp;&nbsp;&nbsp;&nbsp;[symbol]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 5 forms covered">
577&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;DOC) 578&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;DOC)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
578&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(open-doc&nbsp;symbol))) 579&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(open-doc&nbsp;symbol)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
579&nbsp;&nbsp; 580&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
580&nbsp;&nbsp;(defn&nbsp;CONSP 581&nbsp;&nbsp;(defn&nbsp;CONSP
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
581&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`T`&nbsp;if&nbsp;object&nbsp;`o`&nbsp;is&nbsp;a&nbsp;cons&nbsp;cell,&nbsp;else&nbsp;`F`. 582&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`T`&nbsp;if&nbsp;object&nbsp;`o`&nbsp;is&nbsp;a&nbsp;cons&nbsp;cell,&nbsp;else&nbsp;`F`.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
582&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 583&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
583&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&nbsp; 584&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
584&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;believe&nbsp;that&nbsp;Lisp&nbsp;1.5&nbsp;did&nbsp;not&nbsp;have&nbsp;any&nbsp;mechanism&nbsp;for&nbsp;testing&nbsp;whether&nbsp;an 585&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;believe&nbsp;that&nbsp;Lisp&nbsp;1.5&nbsp;did&nbsp;not&nbsp;have&nbsp;any&nbsp;mechanism&nbsp;for&nbsp;testing&nbsp;whether&nbsp;an
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
585&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument&nbsp;was,&nbsp;or&nbsp;was&nbsp;not,&nbsp;a&nbsp;cons&nbsp;cell.&quot; 586&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument&nbsp;was,&nbsp;or&nbsp;was&nbsp;not,&nbsp;a&nbsp;cons&nbsp;cell.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
586&nbsp;&nbsp;&nbsp;&nbsp;[o] 587&nbsp;&nbsp;&nbsp;&nbsp;[o]
</span><br/> </span><br/>
<span class="covered" title="5 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
587&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;CONSP) 588&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;CONSP)
</span><br/> </span><br/>
<span class="covered" title="7 out of 7 forms covered"> <span class="covered" title="7 out of 7 forms covered">
588&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(instance?&nbsp;ConsCell&nbsp;o)&nbsp;&#x27;T&nbsp;&#x27;F))) 589&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(instance?&nbsp;ConsCell&nbsp;o)&nbsp;&#x27;T&nbsp;&#x27;F)))
</span><br/> </span><br/>
</body> </body>
</html> </html>

View file

@ -67,20 +67,20 @@
</tr> </tr>
<tr> <tr>
<td><a href="beowulf/host.clj.html">beowulf.host</a></td><td class="with-bar"><div class="covered" <td><a href="beowulf/host.clj.html">beowulf.host</a></td><td class="with-bar"><div class="covered"
style="width:46.61776691116545%; style="width:56.44047135310849%;
float:left;"> 1144 </div><div class="not-covered" float:left;"> 1389 </div><div class="not-covered"
style="width:53.38223308883455%; style="width:43.55952864689151%;
float:left;"> 1310 </div></td> float:left;"> 1072 </div></td>
<td class="with-number">46.62 %</td> <td class="with-number">56.44 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:61.97718631178707%; style="width:75.37878787878788%;
float:left;"> 163 </div><div class="partial" float:left;"> 199 </div><div class="partial"
style="width:14.068441064638783%; style="width:12.121212121212121%;
float:left;"> 37 </div><div class="not-covered" float:left;"> 32 </div><div class="not-covered"
style="width:23.954372623574145%; style="width:12.5%;
float:left;"> 63 </div></td> float:left;"> 33 </div></td>
<td class="with-number">76.05 %</td> <td class="with-number">87.50 %</td>
<td class="with-number">588</td><td class="with-number">67</td><td class="with-number">263</td> <td class="with-number">589</td><td class="with-number">67</td><td class="with-number">264</td>
</tr> </tr>
<tr> <tr>
<td><a href="beowulf/interop.clj.html">beowulf.interop</a></td><td class="with-bar"><div class="covered" <td><a href="beowulf/interop.clj.html">beowulf.interop</a></td><td class="with-bar"><div class="covered"
@ -236,9 +236,9 @@
</tr> </tr>
<tr><td>Totals:</td> <tr><td>Totals:</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">65.64 %</td> <td class="with-number">68.60 %</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">75.70 %</td> <td class="with-number">77.76 %</td>
</tr> </tr>
</table> </table>
</body> </body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,17 +1,19 @@
<!DOCTYPE html PUBLIC "" <!DOCTYPE html PUBLIC ""
""> "">
<html><head><meta charset="UTF-8" /><title>Further Reading</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><link rel="icon" type="image/x-icon" href="../img/beowulf_logo_favicon.png" /></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Beowulf</span> <span class="project-version">0.3.1-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="further_reading.html"><div class="inner"><span>Further Reading</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>beowulf</span></div></a></li><li class="depth-1 "><a href="mexpr.html"><div class="inner"><span>Interpreting M-Expressions</span></div></a></li><li class="depth-1 "><a href="values.html"><div class="inner"><span>The properties of the system, and their values</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>beowulf</span></div></div></li><li class="depth-2 branch"><a href="beowulf.bootstrap.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bootstrap</span></div></a></li><li class="depth-2 branch"><a href="beowulf.cons-cell.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cons-cell</span></div></a></li><li class="depth-2 branch"><a href="beowulf.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2 branch"><a href="beowulf.gendoc.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gendoc</span></div></a></li><li class="depth-2 branch"><a href="beowulf.host.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>host</span></div></a></li><li class="depth-2 branch"><a href="beowulf.interop.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>interop</span></div></a></li><li class="depth-2 branch"><a href="beowulf.io.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>io</span></div></a></li><li class="depth-2 branch"><a href="beowulf.manual.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>manual</span></div></a></li><li class="depth-2 branch"><a href="beowulf.oblist.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oblist</span></div></a></li><li class="depth-2 branch"><a href="beowulf.read.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>read</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>reader</span></div></div></li><li class="depth-3 branch"><a href="beowulf.reader.char-reader.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>char-reader</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.generate.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>generate</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.macros.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>macros</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="beowulf.reader.simplify.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>simplify</span></div></a></li><li class="depth-2"><a href="beowulf.scratch.html"><div class="inner"><span class="tree" style="top: -176px;"><span class="top" style="height: 185px;"></span><span class="bottom"></span></span><span>scratch</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#further-reading" name="further-reading"></a>Further Reading</h1> <html><head><meta charset="UTF-8" /><title>Further Reading</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><link rel="icon" type="image/x-icon" href="../img/beowulf_logo_favicon.png" /></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Beowulf</span> <span class="project-version">0.3.1-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="further_reading.html"><div class="inner"><span>Further Reading</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>beowulf</span></div></a></li><li class="depth-1 "><a href="mexpr.html"><div class="inner"><span>Interpreting M-Expressions</span></div></a></li><li class="depth-1 "><a href="values.html"><div class="inner"><span>The properties of the system, and their values</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>beowulf</span></div></div></li><li class="depth-2 branch"><a href="beowulf.bootstrap.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bootstrap</span></div></a></li><li class="depth-2 branch"><a href="beowulf.cons-cell.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cons-cell</span></div></a></li><li class="depth-2 branch"><a href="beowulf.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2 branch"><a href="beowulf.gendoc.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gendoc</span></div></a></li><li class="depth-2 branch"><a href="beowulf.host.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>host</span></div></a></li><li class="depth-2 branch"><a href="beowulf.interop.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>interop</span></div></a></li><li class="depth-2 branch"><a href="beowulf.io.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>io</span></div></a></li><li class="depth-2 branch"><a href="beowulf.manual.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>manual</span></div></a></li><li class="depth-2 branch"><a href="beowulf.oblist.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oblist</span></div></a></li><li class="depth-2 branch"><a href="beowulf.read.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>read</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>reader</span></div></div></li><li class="depth-3 branch"><a href="beowulf.reader.char-reader.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>char-reader</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.generate.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>generate</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.macros.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>macros</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="beowulf.reader.simplify.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>simplify</span></div></a></li><li class="depth-2"><a href="beowulf.scratch.html"><div class="inner"><span class="tree" style="top: -176px;"><span class="top" style="height: 185px;"></span><span class="bottom"></span></span><span>scratch</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#further-reading" id="further-reading"></a>Further Reading</h1>
<ol> <ol>
<li><a href="http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf">CODING for the MIT-IBM 704 COMPUTER, October 1957</a> This paper is not about Lisp. But it is about the particular individual computer on which Lisp was first implemented, and it is written in part by members of the Lisp team. I have found it useful in understanding the software environment in which, and the constraints under which, Lisp was written.</li> <li><a href="http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf">CODING for the MIT-IBM 704 COMPUTER, October 1957</a> This paper is not about Lisp. But it is about the particular individual computer on which Lisp was first implemented, and it is written in part by members of the Lisp team. I have found it useful in understanding the software environment in which, and the constraints under which, Lisp was written.</li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/MIT/AIM-001.pdf">MIT AI Memo 1, John McCarthy, September 1958</a> This is, as far as I can find, the earliest specification document of the Lisp project.</li> <li><a href="https://www.softwarepreservation.org/projects/LISP/MIT/AIM-001.pdf">MIT AI Memo 1, John McCarthy, September 1958</a> This is, as far as I can find, the earliest specification document of the Lisp project.</li>
<li><a href="https://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Manual_Mar60.pdf">Lisp 1 Programmers Manual, Phyllis Fox, March 1960</a></li> <li><a href="https://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Manual_Mar60.pdf">Lisp 1 Programmers Manual, Phyllis Fox, March 1960</a></li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=81">Lisp 1.5 Programmers Manual, Michael I. Levin, August 1962</a> This book is essential reading: it documents in some detail the first fully realised Lisp language system.</li> <li><a href="https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=81">Lisp 1.5 Programmers Manual, Michael I. Levin, August 1962</a> This book is essential reading: it documents in some detail the first fully realised Lisp language system.</li>
<li><a href="https://dl.acm.org/doi/pdf/10.1145/800055.802047#page=3">Early LISP History (1956 - 1959), Herbert Stoyan, August 1984</a></li> <li><a href="https://dl.acm.org/doi/pdf/10.1145/800055.802047#page=3">Early LISP History (1956 - 1959), Herbert Stoyan, August 1984</a></li>
<li> <li>
<p><a href="http://www.paulgraham.com/rootsoflisp.html">The Roots of Lisp, Paul Graham, 2001</a></p></li> <p><a href="http://www.paulgraham.com/rootsoflisp.html">The Roots of Lisp, Paul Graham, 2001</a></p>
<li> </li>
<p><a href="http://www.paulgraham.com/icad.html">The Revenge of the Nerds, Paul Graham, 2002</a> This is mainly about why to use Lisp as a language for modern commercial software, but has useful insights into where it comes from.</p> <li><a href="http://www.paulgraham.com/icad.html">The Revenge of the Nerds, Paul Graham, 2002</a> This is mainly about why to use Lisp as a language for modern commercial software, but has useful insights into where it comes from.
<blockquote> <blockquote>
<p>So the short explanation of why this 1950s language is not obsolete is that it was not technology but math, and math doesnt get stale.</p> <p>So the short explanation of why this 1950s language is not obsolete is that it was not technology but math, and math doesnt get stale.</p>
</blockquote></li> </blockquote>
</ol></div></div></div></body></html> </li>
</ol>
</div></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -19,11 +19,12 @@
[environ "1.2.0"] [environ "1.2.0"]
[instaparse "1.4.12"] [instaparse "1.4.12"]
[org.jline/jline "3.23.0"] [org.jline/jline "3.23.0"]
[rhizome "0.2.9"] ;; not needed in production builds [com.github.seancorfield/expectations "2.0.165"]
;; [rhizome "0.2.9"] ;; not needed in production builds
] ]
:main beowulf.core :main beowulf.core
:plugins [[lein-cloverage "1.2.2"] :plugins [[lein-cloverage "1.2.2"]
[lein-codox "0.10.7"] [lein-codox "0.10.8"]
[lein-environ "1.1.0"]] [lein-environ "1.1.0"]]
:profiles {:jar {:aot :all} :profiles {:jar {:aot :all}
:uberjar {:aot :all} :uberjar {:aot :all}

View file

@ -441,7 +441,7 @@
recurse down the list two entries at a time to avoid confusing names recurse down the list two entries at a time to avoid confusing names
with values." with values."
[target plist] [target plist]
(if (and (instance? ConsCell plist)(even? (count plist))) (if (and (instance? ConsCell plist) (even? (count plist)))
(cond (= plist NIL) NIL (cond (= plist NIL) NIL
(= (first plist) target) plist (= (first plist) target) plist
:else (hit-or-miss-assoc target (CDDR plist))) :else (hit-or-miss-assoc target (CDDR plist)))
@ -516,9 +516,10 @@
`indicator` of the symbol which is the first element of the pair to the `indicator` of the symbol which is the first element of the pair to the
value which is the second element of the pair. See page 58 of the manual." value which is the second element of the pair. See page 58 of the manual."
[a-list indicator] [a-list indicator]
(doall
(map (map
#(PUT (CAR %) indicator (CDR %)) #(when (PUT (CAR %) indicator (CDR %)) (CAR %))
a-list)) a-list)))
(defn DEFINE (defn DEFINE
"Bootstrap-only version of `DEFINE` which, post boostrap, can be overwritten "Bootstrap-only version of `DEFINE` which, post boostrap, can be overwritten

View file

@ -1,11 +1,14 @@
(ns beowulf.host-test (ns beowulf.host-test
(:require [beowulf.cons-cell :refer [F make-beowulf-list T]] (:require [beowulf.cons-cell :refer [F make-beowulf-list make-cons-cell T]]
[beowulf.host :refer [CDR DIFFERENCE GENSYM GET NUMBERP PLUS PUT [beowulf.host :refer [ADD1 AND CADDDR CAR CDR DEFINE DIFFERENCE
RPLACA RPLACD TIMES]] ERROR FIXP GREATERP lax? LESSP NILP NULL
NUMBERP OR PLUS RPLACA RPLACD SUB1 TIMES uaf]]
[beowulf.io :refer [SYSIN]] [beowulf.io :refer [SYSIN]]
[beowulf.oblist :refer [NIL]] [beowulf.oblist :refer [*options* NIL]]
[beowulf.read :refer [gsp]] [beowulf.read :refer [gsp]]
[clojure.test :refer [deftest is testing use-fixtures]])) [clojure.test :refer [deftest is testing use-fixtures]]
[expectations.clojure.test
:refer [defexpect expect more-> more-of]]))
(use-fixtures :once (fn [f] (use-fixtures :once (fn [f]
(try (when (SYSIN "resources/lisp1.5.lsp") (try (when (SYSIN "resources/lisp1.5.lsp")
@ -34,17 +37,30 @@
Exception Exception
#"Uncynlic miercels in RPLACA.*" #"Uncynlic miercels in RPLACA.*"
(RPLACA '(A B C D E) 'F)) (RPLACA '(A B C D E) 'F))
"You can't RPLACA into anything which isn't a MutableSequence.") "You can't RPLACA into anything which isn't a MutableSequence."))
) (testing "RPLACD"
(testing "RPLACA"
(let (let
[l (make-beowulf-list '(A B C D E)) [l (make-beowulf-list '(A B C D E))
target (CDR l) target (CDR l)
expected "(A B . F)" expected "(A B . F)"
actual (do (RPLACD target 'F) (print-str l))] actual (do (RPLACD target 'F) (print-str l))]
(is (= actual expected))) (is (= actual expected)))
) (let
) [l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A B)"
actual (do (RPLACD target NIL) (print-str l))]
(is (= actual expected)))
(is (thrown-with-msg?
Exception
#"Un-ġefōg þing in RPLACD.*"
(RPLACD (make-beowulf-list '(A B C D E)) :a))
"You can't represent a keyword in Lisp 1.5")
(is (thrown-with-msg?
Exception
#"Uncynlic miercels in RPLACD.*"
(RPLACD "ABCDE" 'F))
"You can't RPLACD into anything which isn't a MutableSequence.")))
(deftest numberp-tests (deftest numberp-tests
(testing "NUMBERP" (testing "NUMBERP"
@ -71,13 +87,171 @@
(let [expected 3.5 (let [expected 3.5
actual (PLUS 1.25 9/4)] actual (PLUS 1.25 9/4)]
(is (= actual expected)) (is (= actual expected))
(is (float? actual)))
(let [expected 3.5
actual (PLUS -2.5 6)]
(is (= actual expected) "Negative numbers are cool.")
(is (float? actual)))) (is (float? actual))))
(testing "TIMES" (testing "TIMES"
(let [expected 6 (let [expected 6
actual (TIMES 2 3)] actual (TIMES 2 3)]
(is (= actual expected)))
(let [expected 2.5
actual (TIMES 5 0.5)]
(is (= actual expected)))) (is (= actual expected))))
(testing "DIFFERENCE" (testing "DIFFERENCE"
(let [expected -1 (let [expected -1
actual (DIFFERENCE 1 2)] actual (DIFFERENCE 1 2)]
(is (= actual expected)))
(let [expected (float 0.1)
actual (DIFFERENCE -0.1 -0.2)]
(is (= actual expected))))
(testing "ADD1"
(let [expected -1
actual (ADD1 -2)]
(is (= actual expected)))
(let [expected (float 3.5)
actual (ADD1 2.5)]
(is (= actual expected))))
(testing "SUB1"
(let [expected -3
actual (SUB1 -2)]
(is (= actual expected)))
(let [expected (float 1.5)
actual (SUB1 2.5)]
(is (= actual expected))))) (is (= actual expected)))))
(deftest laxness
(testing "lax"
(let [expected true
actual (lax? 'Test)]
(is (= actual expected) "Pass, the Queen's Cat, and all's well")))
(testing "strict"
(binding [*options* (assoc *options* :strict true)]
(is (thrown-with-msg? Exception #".*ne āfand innan Lisp 1.5" (lax? 'Test))))))
(deftest access-tests
(testing "primitive access"
(let [cell (make-cons-cell 1 7)]
(let [expected 1
actual (CAR cell)]
(is (= actual expected)))
(let [expected 7
actual (CDR cell)]
(is (= actual expected))))
(is (thrown-with-msg? Exception #".*Ne can tace CAR of.*" (CAR 7)))
(is (thrown-with-msg? Exception #".*Ne can tace CDR of.*" (CDR 'A)))
(is (thrown-with-msg? Exception #".*Ne liste.*" (CADDDR "Foo")))
(is (thrown-with-msg? Exception #".*uaf: unexpected letter in path.*"
(uaf (make-beowulf-list '(A B C D))
'(\d \a \z \e \d))))))
(deftest misc-predicate-tests
(testing "NULL"
(let [expected T
actual (NULL NIL)]
(is (= actual expected)))
(let [expected F
actual (NULL (make-beowulf-list '(A B C)))]
(is (= actual expected))))
(testing "NILP"
(let [expected T
actual (NILP NIL)]
(is (= actual expected)))
(let [expected NIL
actual (NILP (make-beowulf-list '(A B C)))]
(is (= actual expected))))
(testing "AND"
(let [expected T
actual (AND)]
(is (= actual expected)))
(let [expected T
actual (AND T T)]
(is (= actual expected)))
(let [expected T
actual (AND T T T)]
(is (= actual expected)))
(let [expected T
actual (AND 1 'A (make-beowulf-list '(A B C)))]
(is (= actual expected)))
(let [expected F
actual (AND NIL)]
(is (= actual expected)))
(let [expected F
actual (AND T T F T)]
(is (= actual expected))))
(testing "OR"
(let [expected F
actual (OR)]
(is (= actual expected)))
(let [expected T
actual (OR NIL T)]
(is (= actual expected)))
(let [expected T
actual (OR T F T)]
(is (= actual expected)))
(let [expected T
actual (OR 1 F (make-beowulf-list '(A B C)))]
(is (= actual expected)))
(let [expected F
actual (OR NIL)]
(is (= actual expected)))
(let [expected F
actual (OR NIL F)]
(is (= actual expected))))
(testing "FIXP"
(let [expected F
actual (FIXP NIL)]
(is (= actual expected)))
(let [expected F
actual (FIXP 'A)]
(is (= actual expected)))
(let [expected F
actual (FIXP 3.2)]
(is (= actual expected)))
(let [expected T
actual (FIXP 7)]
(is (= actual expected))))
(testing "LESSP"
(let [expected F
actual (LESSP 7 3)]
(is (= actual expected)))
(let [expected T
actual (LESSP -7 3.5)]
(is (= actual expected)))
(let [expected F
actual (LESSP 3.14 3.14)]
(is (= actual expected))))
(testing "GREATERP"
(let [expected T
actual (GREATERP 7 3)]
(is (= actual expected)))
(let [expected F
actual (GREATERP -7 3.5)]
(is (= actual expected)))
(let [expected F
actual (GREATERP 3.14 3.14)]
(is (= actual expected)))))
;; Really tricky to get DEFINE set up for testing here. It works OK in the
;; REPL, but there's nonsense going on with lazy sequences. Better to
;; reimplement in Lisp.
;; (deftest define-tests
;; (testing "DEFINE"
;; (let [expected "(FF)"
;; actual (str (doall (DEFINE
;; (gsp "((FF LAMBDA (X) (COND ((ATOM X) X) (T (FF (CAR X))))))"))))]
;; (is (= actual expected)))))
(defexpect error-without-code
(expect (more-> clojure.lang.ExceptionInfo type
(more-of {:keys [:phase :function :args :type :code]}
'A1 code) ex-data)
(ERROR)))
(defexpect error-with-code
(let [x 'X1]
(expect (more-> clojure.lang.ExceptionInfo type
(more-of {:keys [:phase :function :args :type :code]}
x code) ex-data)
(ERROR x))))