# Dan Baronet

Daniel Baronet (6 May 1956–1 Nov 2016), also known as APLtrainer, was an APL (and later J) programmer since 1976, working for I.P. Sharp Associates in Melbourne, Toronto, Montreal, and Copenhagen, from 1983 to 1988, and for Dyalog Ltd from 2006 until his death.

Baronet was responsible for Dyalog's Simple APL Library Toolkit (SALT) and its framework for user commands (affectionately known as spice), but also worked on many other APL tools through his company Milinta Inc, specialising in the development of free open-source tools to transfer of APL code between dialects. He was a prolific writer and presented at many events.

## The "Dan Baronet special"

Baronet was famous for innovative uses of APL primitives. He's credited with discovering that `b⊥b` or, as he preferred writing it, `⊥⍨b`, counts the number of trailing ones in the Boolean vector `b`:

`⊥` (Decode) performs base conversion. If the left argument is a vector, it performs mixed base conversion.

For a base vector $b=b_{n},\cdots ,b_{0}$ and a digit vector $a=a_{n},\cdots ,a_{0}$ , `b ⊥ a` converts $a$ to the mixed base $b$ , i.e., it computes $b_{0}\cdots b_{n-1}a_{n}+\cdots +b_{0}b_{1}a_{2}+b_{0}a_{1}+a_{0}$ .

Now, in a monadic context, `⍨` (Commute) causes the function to the left to be called with equal left and right arguments.

So `⊥⍨b` is defined as `b⊥b`, which computes $a_{0}\cdots a_{n}+\cdots +a_{0}a_{1}a_{2}+a_{0}a_{1}+a_{0}$ , the sum of all cumulative products from the right to the left.

For `k` trailing ones, the `k` rightmost products are `1` and all others are `0`, so their sum is equal to `k`.