Sure thing! I should have done that above 
My approach was the following. I first started with the out of the box relevance that we use for the ‘IP Address’ property (that you can see from Tools → Manage Properties):
if ( exists true whose (if true then ( exists ip interfaces of network) else false) ) then addresses whose (it as string != "0.0.0.0") of ip interfaces whose (not loopback of it) of network as string else nothing
I see that this returns a string (as specified in the relevance, but is also evident in the Fixlet Debugger by ensuring ‘View → Show Type Information’ is enabled). We don’t need the entire IP address to determine even or odd, so, we can parse the string to return the last ‘octet’ (we could have just as easily returned only the last character too). To do this, we can wrap the relevance logic for IP Address in parens, and have it parse the return:
following texts of lasts "." of (if ( exists true whose (if true then ( exists ip interfaces of network) else false) ) then addresses whose (it as string != "0.0.0.0") of ip interfaces whose (not loopback of it) of network as string else nothing)
Note that I pluralized ‘texts’ and ‘lasts’ above since there can be multiple IP Addresses returned, and so, we’d want to parse each one.
Next, we’ll want to perform the mod calculation, however, to do so, we’ll first have to convert the string to an integer. We can do this by casting the entire logic as integer
:
(following texts of lasts "." of (if ( exists true whose (if true then ( exists ip interfaces of network) else false) ) then addresses whose (it as string != "0.0.0.0") of ip interfaces whose (not loopback of it) of network as string else nothing)) as integer
We can then perform our mod calculation. Here is where it gets a bit interesting. To calculate mod for a singular result/answer, we would just do something like the following:
Q: 100 mod 2
A: 0
T: 0.020 ms
I: singular integer
However, we’ve already noted that there can be multiple IP Addresses, and so, we’ll have to take a slightly different approach. If we leverage the above form, we’ll get a singular expression is required
error (the following link is useful to better understand common relevance errors and how to fix them: Common Relevance Error Messages). If we reference the 4 major forms of relevance, in this case, we’ll need to be able to iterate over the list to perform the mod calculation. We can do that with the fourth form: (it) of <property> of <object>
. So, the following will iterate on the results:
(it) of ((following texts of lasts "." of (if ( exists true whose (if true then ( exists ip interfaces of network) else false) ) then addresses whose (it as string != "0.0.0.0") of ip interfaces whose (not loopback of it) of network as string else nothing)) as integer)
And we can now add the calculation logic:
(it mod 2 = 0) of ((following texts of lasts "." of (if ( exists true whose (if true then ( exists ip interfaces of network) else false) ) then addresses whose (it as string != "0.0.0.0") of ip interfaces whose (not loopback of it) of network as string else nothing)) as integer)
Hope that helps show how you might go about building something like this. There are various approaches, but I tend to build in steps. I’m sure others may have additional thoughts to share here too on their approaches.