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,
`(lambda (x) (and (> x 3) ,(some-other-expression x))) I can then inspect the expression and translate it accordingly for various source data (sql, xpath, files, vectors), etc. A reread of http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf 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. I'll keep you posted, most likely via random SOS pings to this list :). Thanks. On Sun, Dec 29, 2013 at 10:16 AM, Matthias Felleisen <matth...@ccs.neu.edu>wrote: > > On Dec 28, 2013, at 2:01 PM, Scott Klarenbach wrote: > > I'm playing around with the idea of a sort of "Language Integrated Query" > like LINQ. For example: > > > (sql (query 'my-table > #:where (λ (row) (> (hash-ref row 'id) 3)))) > "select * from my-table where id > 3" > > > I understand your motivation now. See Greg's suggestions. I think they are > right on. > > 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: > http://homepages.inf.ed.ac.uk/slindley/papers/practical-theory-of-linq.pdf 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, > > > > (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 :-) > (2) I think a DSL approach to DBs based on syntactic abstractions might be > more useful. > > Keep us posted. Better yet, report on your experience at the next > RacketCon. > > > > As an aside: > > >> 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. >> > > 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. > > > > I think a function that displays (1) docs and/or (2) specs (say contracts) > might be a lot more useful than raw source. > > -- Matthias > > > > -- Talk to you soon, Scott Klarenbach PointyHat Software Corp. www.pointyhat.ca p 604-568-4280 e sc...@pointyhat.ca 200-1575 W. Georgia Vancouver, BC V6G2V3 _______________________________________ To iterate is human; to recur, divine
____________________ Racket Users list: http://lists.racket-lang.org/users