# How to condition arguments of a pure function?

I would like to exclude the point {x=0,y=0} in the function definition

f = Function[{x, y}, {x/(x^2 + y^2), -(y/(x^2 + y^2))}]


So far I tried ConditionalExpressionand /; without success.

Thanks!

• What should happen for f[0,0]? – Lukas Lang Aug 8 at 11:14
• Function shouldn't be applied to  {0,0} or should return Null! – Ulrich Neumann Aug 8 at 11:16
• Assuming it needs to be a pure function for some reason, I guess your only real option is to use If or similar to do the check. As far as I am aware, Function will always evaluate when it is applied to something. Depending on the amount of conditions, you could use e.g. Replace[{##},{{0,0}->Null,{x_,y_}:>{x^2,y^2}}]& or Replace[{##},{{x_,y_}/;x!=0||y!=0:>{x^2,y^2},_->Null}]& to have a syntax more similar to traditional downvalue definitions – Lukas Lang Aug 8 at 11:24
• @LukasLang Thank you for your assistance. My purpose is to use the pure function inside TransformedRegion. A possible workaround could be the definition of a region thereby excluding the point {0,0} . – Ulrich Neumann Aug 8 at 11:27
• If you're using it in TransformedRegion, I don't recommend using the return value Null. It's probably not the correct return for "this thing doesn't exists". Undefined is probably better. Null is a programmatic value, not a mathematical one. – Sjoerd Smit Aug 8 at 11:31

As far as I know, you cannot have a pure function that holds its arguments depending on a condition on the arguments. Condition specifically works with pattern matching and pure functions don't use the pattern matcher. So the behaviour that f[0, 0] doesn't evaluate simply cannot be achieved with a pure function.

The alternative is some sort of default return value. Probably the easiest way to do this, is with something like If, Switch or Which:

f = Function[{x, y},
If[ TrueQ[x == 0 || y == 0],
Undefined,
{x/(x^2 + y^2), -(y/(x^2 + y^2))}
]
];
f[0, 0]


Undefined

Note the use of TrueQ, which is necessary to deal with the case f[a, b] where a and b are symbols. The If will not evaluate otherwise, since a == 0 and b == 0 remain unevaluated (because they are equation, not truth statements). The test x === 0 is not useful here either, since 0. === 0 evaluates to False. PossibleZeroQ[x] is another test you could use in the If statement.

• Thank you for your comprehensive answer. I didn't know Undefined – Ulrich Neumann Aug 8 at 12:15