One way to think about this syntax is in terms of "functions with parameters that accept inputs". The normal way this is written is
function[inputs..., parameters...]
this structure leads to a somewhat awkward syntax when mapping over a list of inputs:
list = {1.234, 5.678};
(Round[#1, 0.1] & ) /@ list
(* {1.2, 5.7} *)
The two-argument-list syntax allows you to construct a parameterized operator that acts upon inputs:
round[a_][x_] := Round[x, a];
round[0.1] /@ list
(* {1.2, 5.7} *)
which is a little tidier. I believe the explosion of built-in functions which permit this syntax is due to the new Query function in version 10:
Query[round[0.1]][list]
(* {1.2, 5.7} *)
In general, there is a lot more support for more formal functional programming style in version 10.
SortBy[Last], indexed variablesx[1][t],x[2][t]in a DE system,....I just usedThrough[OptionValue["EventFunctions"][ics]]in this answer. – Michael E2 Nov 05 '14 at 19:48SubValuesto get similar functionality. It can be quite useful. – Leonid Shifrin Nov 05 '14 at 20:17