<div dir="ltr">I think I have a much simpler approach for my purposes.  I can have a (define-expression ...) macro that basically just stores the expression as a quoted list.  This largely emulates c#'s expression trees, but with a lot less hassle and ugly syntax.  I can then achieve the composition I desire through quasiquoting/unquoting the expressions.  ie,<div>
<br></div><div>`(lambda (x) (and (> x 3) ,(some-other-expression x)))</div><div><br></div><div>I can then inspect the expression and translate it accordingly for various source data (sql, xpath, files, vectors), etc.</div>
<div><br></div><div>A reread of <a href="http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf">http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf</a> shows that basically all they are doing is quoting and unquoting expressions and then normalizing them for a particular runtime target.  Through this you can achieve a lot of the composition and parametrization of queries that is sorely lacking in sql.</div>
<div><br></div><div>I'll keep you posted, most likely via random SOS pings to this list :).</div><div><br></div><div>Thanks.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Dec 29, 2013 at 10:16 AM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div class="im"><div>On Dec 28, 2013, at 2:01 PM, Scott Klarenbach wrote:</div>
<br><blockquote type="cite"><div dir="ltr"><div>I'm playing around with the idea of a sort of "Language Integrated Query" like LINQ.  For example:</div>
<div><br></div><div>> (sql (query 'my-table</div><div>     #:where (ë (row) (> (hash-ref row 'id) 3))))</div><div>"select * from my-table where id > 3"</div><div><br></div></div></blockquote><div>
<br></div></div><div>I understand your motivation now. See Greg's suggestions. I think they are right on. </div><div class="im"><div><br></div><blockquote type="cite"><div dir="ltr"><div>In another thread, I'd like to poll this list as to the benefits (if any) of such a linq-style approach.  I got inspired by this paper: <a href="http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf" target="_blank">http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf</a> and really enjoyed the c# linq stuff I've played around with.  It may very well be; however, that this is not desired or useful,</div>
</div></blockquote><div><br></div><div><br></div></div><div>(1) Part of the Racket philosophy is not to exclude some approach because it is not desired or not considered useful. We welcome experimentations such as yours and when things fail, we re-consider our language. (No promise that we change it :-) </div>
<div>(2) I think a DSL approach to DBs based on syntactic abstractions might be more useful. </div><div><br></div><div>Keep us posted. Better yet, report on your experience at the next RacketCon. </div><div class="im"><div>
<br></div><div><br></div><br><blockquote type="cite"><div dir="ltr"><div>As an aside:</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

This might be a MIT misunderstanding about the relationship between Scheme and the lambda calculus. It is certainly not possible in general and I see no pragmatic use case for an approximation. <br></blockquote><div><br>
</div>
<div>It would be really nice to print the source code of a known procedure on the repl, in order to get a quick view of what it does.  Or, the "pa" function which prints out the arguments of a procedure is even more useful.</div>

</div></blockquote><br></div></div><div><br></div><div>I think a function that displays (1) docs and/or (2) specs (say contracts) might be a lot more useful than raw source. </div><span class="HOEnZb"><font color="#888888"><div>
<br></div><div>-- Matthias</div><div><br></div><div><br></div><br></font></span></div></blockquote></div><br><br clear="all"><div><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>