<div dir="ltr">Hi there,<div><br></div><div>I&#39;d like to create a macro that accepts non-optional keyword arguments in any order.  It should however, ensure that all the arguments are provided.  Finally, it should not allow duplicates.</div>
<div><br></div><div style>So far I&#39;ve only been able to solve for my first criteria.</div><div><br></div><div>As a test, I have this:</div><div><br></div><div><div>(syntax-parse stx</div><div>  [(a:id b:id (~or (~seq #:key1 c:id) (~seq #:key2 d:id)) ...) #t])</div>
<div><br></div><div style>Now, that matches for:</div><div style>#&#39;(a b #:key1 hey #:key2 there)</div><div style>#&#39;(a b #:key2 there #:key1 hey)<br></div><div style><br></div><div style>Which is what I want.  But unfortunately it also matches:</div>
<div style>#&#39;(a b #:key2 there)</div><div style><br></div><div style>And worse:</div><div style>#&#39;(a b #:key2 one #:key2 two #:key2 three)</div><div style><br></div><div style>The reasons are obvious.  I&#39;m just wondering if there&#39;s a more robust way of dealing with these types of scenarios that I&#39;m missing?  I thought of combining an (~or (~and clause but that becomes very tedious, and leaves the duplicate problem unsolved.</div>
<div style><br></div><div style>Thanks.</div><div style><br></div>-- <br>Talk to you soon,<br><br>Scott Klarenbach<br><br>PointyHat Software Corp.<br><a href="http://www.pointyhat.ca" target="_blank">www.pointyhat.ca</a><br>
p 604-568-4280<br>e <a href="mailto:scott@pointyhat.ca" target="_blank">scott@pointyhat.ca</a><br><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">200-1575 W. Georgia</span><br>
Vancouver, BC <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">V6G2V3</span><br><br>_______________________________________<br>To iterate is human; to recur, divine
</div></div>