# Stop function evaluating input at time of definition [duplicate]

This question already has an answer here:

I would like to create a function that acts on whether the input is even or odd, e.g.:

In:= f[a_] = If[EvenQ[a], 2 a, 3 a];
f

Out= 6


I've determined (I think) that this is because a is an expression and QEven returns false for expressions. How do I hold off evalution of this until input is given? I thought something like Defer would work but then it is never evaluated (see below)!

In:= g[a_] = If[Defer[EvenQ[a]], 2 a, 3 a]

Out= If[EvenQ[a], 2 a, 3 a]

In:= g

Out= If[EvenQ, 2 * 3, 3 * 3]


Apologies if this gets asked a lot - I assume this is a common issue, but I was unable to come up with appropriate search terms to describe it (I'm not very familiar with Mathematica terminology yet). Thanks!

## marked as duplicate by Kuba♦, Artes, Leonid Shifrin, Sjoerd C. de Vries, Yves KlettOct 25 '13 at 14:34

• You need to SetDelayed instead of Set. f[a_] := ... – Kuba Oct 25 '13 at 10:36
fun[x_?EvenQ] := 2 x

fun yields 4 and fun yields 9.