Define a function f such that f(f(n)) = -n for all non-zero integers n
Python: 61 34 30 29 27 points

f: Q -> Q

in math:

       | 0.5-x   if x is in Q \ Z
f(x) = |
       | x+0.5   if x is in Z


in Python:

f=lambda x:.5+[x,-x][x%1&gt;0]


tested with

filter(lambda n: n[0] != -n[1], map(lambda n:(n,f(f(n))),range(0,50)))


logic behind this:

When you take an integer n and put it into f you will get x+0.5. This is not an integer any more, so the next application will be 0.5-(x+0.5) which is -x.

Credits

Thanks to 


Bakuriu for striping it down from 61 characters to 34 characters.
Volatility for further reducing code size to 30 characters.
copy for reducing code size to 29 characters (and fixing a potential floating point problem).
aditsu for mentioning an inconsistency that came with the changes above.


Notes

First I thought this would be ok

f = lambda n: 1j*n


but its f:N->C and that is not allowed :-/