3 ms·
For contrast, here's how I'd handle the example given on the front page in Lil[0]: i:"%j" parse shell["curl -s https://api.weather.gov/gridpoints/BOU/63,62
by RodgerTheGreat 1y ago
For contrast, here's how I'd handle the example given on the front page in Lil[0]:
i:"%j" parse shell["curl -s https://api.weather.gov/gridpoints/BOU/63,62/forecast"].out
t:i.properties.periods..temperature
o.average:(sum t)/count t
o.minimum:min t
o.maximum:max t
show[o]
Lil doesn't have implicit parsing of .json arguments like Blots- certainly a nice feature for the niche Blots is aimed at. Lil also doesn't have an arithmetic average as a builtin like Blots, but in this case it's easy enough to do without.
The biggest difference here is how Lil handles indexing: The ".." in that second line can be read as "for every index"; a wildcard. I can follow the mapping that occurs in Blots' "via" expression, but I find it less clear in this example.
It can also be nice to treat lists-of-objects as proper SQL-like tables:
select number name temperature windSpeed from table i.properties.periods
+--------+-------------------+-------------+---------------+
| number | name | temperature | windSpeed |
+--------+-------------------+-------------+---------------+
| 1 | "This Afternoon" | 54 | "14 mph" |
| 2 | "Tonight" | 46 | "3 to 12 mph" |
| 3 | "Wednesday" | 69 | "5 mph" |
| 4 | "Wednesday Night" | 45 | "3 mph" |
| 5 | "Thursday" | 79 | "5 mph" |
| 6 | "Thursday Night" | 49 | "5 mph" |
| 7 | "Friday" | 83 | "2 to 6 mph" |
| 8 | "Friday Night" | 52 | "6 mph" |
| 9 | "Saturday" | 81 | "3 to 8 mph" |
| 10 | "Saturday Night" | 53 | "3 to 8 mph" |
| 11 | "Sunday" | 81 | "3 to 7 mph" |
| 12 | "Sunday Night" | 54 | "3 to 7 mph" |
| 13 | "Monday" | 77 | "3 to 7 mph" |
| 14 | "Monday Night" | 53 | "3 to 7 mph" |
+--------+-------------------+-------------+---------------+
I hope you continue to tinker and evolve Blots; a personal scripting language guided by the use-cases you encounter naturally can be very rewarding and useful.
[0] http://beyondloom.com/tools/trylil.html http://beyondloom.com/tools/trylil.html
- iberator 1y agowow that sql like code is really impressive
- flymasterv 1y agoLil is such a beautiful language. It’s so much fun for little data tasks like this.
- hn-ifs 1y agoThis is the sort of thing I use Nushell for, brilliant data focus shell!
- hn-ifs 1y agoNow I'm on the computer this is the Nushell variant, you could probably do something with reduce too: ~> http get https://api.weather.gov/gridpoints/BOU/63,62/forecast | from json | get properties.periods.temperature | {average: ($in | math avg) minimum: ($in | math min) maximum: ($in | math max)} ╭─────────┬───────╮ │ average │ 66.36 │ │ minimum │ 52 │ │ maximum │ 81 │ ╰─────────┴───────╯ ~>