The analogy is far from perfect, but Snap! is to Scratch as Mycroft is to Sherlock.
For me, the big advantage for Snap! is its provision of custom functions rather than just the custom blocks that Scratch 2 offers - Snap! functions return values that can be passed to other functions and so on, making it much easier to implement mathematical ideas and to ...
The middle column is Snap!.
In Snap! you can create your own C-shaped blocks, as well as functions (see range block), this is in addition to the procedures that can be done in scratch.
Note: I could not get the last one to work, but some times you only need to get the image. However the others do work (fully functional).
The biggest features Snap! has that Scratch doesn't are first-class EVERYTHING and functions.
Scratch only lets you create custom command blocks, not reporter or Boolean blocks. This makes Snap! much more suitable for writing algorithms that rely on return values.
In Snap!, everything is first class. You can pass around scalar values, lists, blocks (and ...