News for hackers. Stuff that matters.
Re:Photon – a live demo of a natural language interface to d... by erezsh on Thursday August 27, 2020 @05:17AM (#24291605)
I would suggest something more like:

    teachers[age > 30].count
(Because I'm working on something exactly like this right now)
Re:Photon – a live demo of a natural language interface to d... by moonchild on Thursday August 27, 2020 @03:56PM (#24297928)
In apl (incl. apl-alikes—kdb, etc.), you can essentially say this directly. 'age > 30' produces an array with the same shape as 'age' with a 1 for instances that are >30 and 0 else. So for instance:

        27 42 44 > 30
   0 1 1
If all you want is a count of teachers older than 30, you can simply sum up the resulting array, so:

         +/0 1 1  ⍝note: '/' is reduction, so +/ is sum reduction
   2

If you want the indices, you can use 'where', which will produce an array of indices corresponding to 1s in its argument, so

         ⍸0 1 1
   1 2
Indicates that '0 1 1' has 1s at indices 1 and 2. (We could also take the length of this array to get the count of teachers older than 30, although that would be a bit silly compared to just summing the original array.)

We can then use these indices to index a different array:

         ages←27 42 44
         names←'anthony' 'barbara' 'bert'
         names[1 2]
    barbara  bert
         names[⍸ ages>30]
    barbara  bert
However, we don't even need to use 'where' in this case; the reduction operator (/) has a second use which lets us say:

         0 1 1 / names
    barbara  bert
         (ages > 30) / names
    barbara  bert
Good luck with your database, and hope this helps!