Drop 1st element of {#a, #b, #c} &

I pass the following to a function:

{#a, #b, #c} &


These are keys that are used in a list of associations. There are instances where I want to pass only the last 2 elements, such as:

{#b, #c} &


Right now, I just rewrite it. But it seems like there should be a way to do this by getting rid of the first slot.

I looked at the full form and see that it's:

FullForm[{#a, #b, #c} &]

Function[List[Slot["a"], Slot["b"], Slot["c"]]]


I thought I could somehow get inside and drop Slot["a"], but can't seem to do it. I tried replacing Slot["a"] with a blank, but I'm left with a comma at the beginning of the list. I also tried Apply to change Function to List and doing it in the result. I couldn't.

Is there any way to get rid of the first element, #a, without rewriting the expression?

• Instead of a blank you could replace Slot["a"]->Nothing. You'll get this Nothing in the resulting function object, but once the function is applied, Nothing will collapse. – Ruslan Nov 21 '18 at 6:51

You could pass it to Delete:

Delete[#, {1, 1}] &[{#a, #b, #c} &]


{#b, #c} &

foo = {#a, #b, #c} &;

foo[[{1}, 2 ;;]]


{#b, #c} &

or, but only because we know there won't be any side effects:

Evaluate /@ Rest /@ foo


{#b, #c} &

or

foo /. {_Slot, rest__Slot} :> {rest}


At the end consider using an operator form of a KeyDrop

bar = KeyTake[{"a", "b", "c"}];

(Rest /@ bar)@<|"a" -> 1, "b" -> 1, "c" -> 1|>


<|"b" -> 1, "c" -> 1|>

• I accepted Coolwater's answer because it solved my problem simply. I appreciate the extra insight that your answer provided. Actually, I'll have to spend more time to really understand it though. – Mitchell Kaplan Nov 20 '18 at 21:51
• @MitchellKaplan sure, btw, can you give a little insigth into how do you use it? Because it feels like a XY problem, maybe there is a better way anyway. – Kuba Nov 20 '18 at 21:55
• I use a lot of lists of associations and very often I have to sum things by one or more keys. Why I asked this question: I work in reinsurance. My list has, among other things: treaty, effective date, line of business, IBNR. I'm estimating IBNR by all 3, but it has to balance to the total IBNR for effective/line. I need to sum both by all 3, but also by only effective/line. I call a function that does this, and I want to adjust the keys I'm using to eliminate treaty when I'm summing over just effective/line. Left some detail out to fit answer into comment. – Mitchell Kaplan Nov 21 '18 at 16:51