4 ms·
I'm partial to select total from orders myself. I really wish was as much progress on syntaxes for expressing relational algebra as there is for the functi
by bcoates 14y ago
I'm partial to
select total from orders
myself. I really wish was as much progress on syntaxes for expressing relational algebra as there is for the functional stuff. Dealing with map and apply seems a bit fiddly and low-level for what should be a straightforward thing to express declaratively.
- adambard 14y ago(defmacro select [total _ coll] (let [total (keyword total)] `(map ~total ~coll))) (select total from orders) Problem solved!
- draegtun 14y agoNice. Here are some interesting non-macro variants, first in Rebol: select: func [block] [ totals: [] parse block [ set this word! 'from set coll word! (totals: map-each n (get coll) [get in n this]) ] totals ] ; then later... select [total from orders] ;; nb. `select` is a core function provided by Rebol ;; so remember this example overwrites that ;; (in this scope/context) :) ;; ;; Alternative `dialect` to strive for would be.. ;; ;; doMap [select total from orders] And also in Io: select := method( msg := call argAt(0) this := msg name coll := msg next next name newMsg := message(COLL map) // COLL just a placeholder message newMsg setName(coll) // Now been changed to correct var provided newMsg next appendArg(this asMessage) call sender doMessage(newMsg) ) # then later... select(total from orders) Both examples work at runtime. However in Io you can also amend the AST directly.
- tome 14y agoI agree, but I think that `map` is already a declarative interface (albeit to an implementation that is presumably functional).
- njs12345 14y agoThere's a GHC (Haskell) extension which lets you use list comprehensions which read like SQL: http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/syntax-extns.html#7.3.9.%20Generalised%20(SQL-Like)%20List%20Comprehensions http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/synta...