(define (doublequoted-symbol? sym)<br>&nbsp; (and (pair? sym) (eqv? (car sym) &#39;quote)))<br><br>(define-syntax match<br>&nbsp; (syntax-rules ()<br>&nbsp;&nbsp;&nbsp; ((match vars [pfirst prest ...] body ...)<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; (cond<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((and (not (doublequoted-symbol? (quote pfirst)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (symbol? (quote pfirst)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((pfirst (car vars)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (match (cdr vars) [prest ...] body ...)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((eqv? pfirst (car vars))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (match (cdr vars) [prest ...] body ...))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else #f)))<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ((match vars [] body ...) (begin body ...))))<br><br>(match &#39;(1 2 3) (one 2 three)<br>&nbsp; (display three))<br><br>
<br><br>Sorry for not commenting on the code, but here&#39;s a basic idea of what it SHOULD do:<br>(match &#39;(1 2 3) (1 2 3) (display 3)) should match perfectly and display 3 on the terminal (it doesn&#39;t).<br>(match &#39;(1 2 3) (one two three) (display 3)) works perfectly, and prints 3.
<br>(match &#39;(1 2 3) (&#39;one &#39;two &#39;three) (display &#39;one)) - This should fail to match the pattern altogether, as symbols which are already quoted are matched for equality, rather than used as identifiers as above. This dies miserably without returning #f.
<br>(match &#39;(1 2 3) (one 2 three) (display three)) - This should immediately create an alias for the values 1 and 3 (&#39;one&#39; and &#39;three) and match the second values for equality. Unfortunately, this is not the case.
<br><br><br>
(match &#39;(1 2 3) (one 2 three)<br>
&nbsp; (display three))<br>... gives the following error:<br>&quot;let: bad syntax (not an identifier) in: 2&quot;<br><br>It seems to be completely ignoring the conditional.<br>So I performed a test:<br>(and (not (doublequoted-symbol? (quote 2)))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (symbol? (quote 2)))<br>... actually returns FALSE. So then why is the conditional statement branching off completely wrong?<br><br>And then, here&#39;s the real kill. I can&#39;t debug the damn thing.<br>
Doing so sends an alert window flying in my face, and a larger one behind it.<br><br>&quot;rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?<br><br>rest: expected argument of type &lt;non-empty list&gt;; given ()<br><br>&nbsp;=== context ===<br>C:\Program Files\PLT\collects\mzlib\list.ss:295:2: rest
<br>C:\Program Files\PLT\collects\mztake\debug-tool.ss:804:10: can-step-out?&quot;<br><br>^ Can someone tell me what the hell is going on?<br>