The thing is, a lot of things you think you need a set-builder for, you can actually do directly.
Let's consider some data:
$ grep "^president-era" early-us-presidents.sw president-era |Washington> => |year: 1789> + |year: 1790> + |year: 1791> + |year: 1792> + |year: 1793> + |year: 1794> + |year: 1795> + |year: 1796> + |year: 1797> president-era |Adams> => |year: 1797> + |year: 1798> + |year: 1799> + |year: 1800> + |year: 1801> president-era |Jefferson> => |year: 1801> + |year: 1802> + |year: 1803> + |year: 1804> + |year: 1805> + |year: 1806> + |year: 1807> + |year: 1808> + |year: 1809> president-era |Madison> => |year: 1809> + |year: 1810> + |year: 1811> + |year: 1812> + |year: 1813> + |year: 1814> + |year: 1815> + |year: 1816> + |year: 1817> president-era |Monroe> => |year: 1817> + |year: 1818> + |year: 1819> + |year: 1820> + |year: 1821> + |year: 1822> + |year: 1823> + |year: 1824> + |year: 1825> president-era |Q Adams> => |year: 1825> + |year: 1826> + |year: 1827> + |year: 1828> + |year: 1829>Now we can ask: "Who was the president in 1825?"
-- initially you might try something like this: |x> in "" |early US Presidents: _list> such that <year: 1825|president-era|x> > 0.5 -- but using inverse we can do it directly: inverse-president-era |year: 1825>Indeed, let's do it:
sa: load early-us-presidents.sw sa: create inverse sa: inverse-president-era |year: 1825> |Monroe> + |Q Adams>Now, let's consider some more data:
$ grep "^president-number" early-us-presidents.sw president-number |Washington> => |number: 1> president-number |Adams> => |number: 2> president-number |Jefferson> => |number: 3> president-number |Madison> => |number: 4> president-number |Monroe> => |number: 5> president-number |Q Adams> => |number: 6>And now we might ask: "What was the party of the third president?"
-- again, you might ask it in set-builder form: party |x> for |x> in "" |early US Presidents: _list> such that president-number|x> == |number: 3> -- but once again, it is cleaner and easier to do it directly: sa: inverse-president-number |number: 3> |Jefferson> sa: party inverse-president-number |number: 3> |party: Democratic-Republican>Anyway, the general proposed form for set-builder in BKO is something like this:
KET in SUPERPOSITION such that TRUTH-STATEMENT
and
OP-SEQUENCE KET for KET in SUPERPOSITION such that TRUTH-STATEMENT
And I'm not 100% sure on using "such that". Also considering "st", "such-that", and "where".
And I guess that is about it.
OK. How about some notes first:
1) notice how easy it is to grep sw files to extract what you are interested in. This is the big win from having no multi-line constructs in BKO. Heh, and also the reason why \r and \n are not allowed inside bras and kets.
2) Note how the direct version always mentions "inverse-OP" (here "inverse-president-era" and "inverse-president-number"). This is probably to be expected because it is replacing a set builder, and set builders are in some sense an inverse. I need to explain this clearer sometime.
3) the BKO set-builder notation is much closer to standard SQL and SPARQL than the direct method.
Update: Let's try and expand note (2).
Consider:
{x in R | f(x) = y }
this is the same as the inverse function:
x = f^-1(y)
Likewise, in BKO:
|x> in "" |number: _list> such that foo |x> == |y>
this is the same as the inverse direct version:
inverse-foo |y>
Here, let me show a quick example in the console:
sa: foo |a1> => |y> sa: foo |a2> => |y> sa: foo |a3> => |y> sa: foo |a4> => |y> sa: foo |a5> => |fish> sa: foo |a6> => |soup> sa: foo |a7> => |fish> sa: create inverse sa: inverse-foo |y> |a1> + |a2> + |a3> + |a4> sa: inverse-foo |fish> |a5> + |a7> sa: inverse-foo |soup> |a6>Update: in note (1) above I noted how easy it is to grep sw files. Well, it just occurred to me that it is easy to find supported operators in a sw file.
eg:
$ sed 's/|.*$//g' early-us-presidents.sw | sort | uniq ---------------------------------------- dissolved founded full-name party president-era president-number supported-ops $ sed 's/|.*$//g' improved-imdb.sw | sort | uniq ---------------------------------------- actors movies supported-ops $ sed 's/|.*$//g' imdb-ratings.sw | sort | uniq imdb-rating imdb-rating-self imdb-votes imdb-votes-selfCool and useful!
No comments:
Post a Comment