I think the issue is you can’t assign a new value to a variable mid-way through a command. Only the left-most word can have it’s value assigned.
I think you can achieve your goal by having one line flip the value of X, then the second line apply that new value of X to P.L. Something like:
X EZ X
P.L ADD 4 MUL 4 X
To further clarify why this is the case, in your command above you’re finding the result of EZ X to either a value of 1 or 0, then reading the current X value (the opposite). To teletype, this looks like MUL 4 X !X and MUL can only multiply 2 numbers together. Variables are always ‘read-only’ unless in the left-most position in a command. Thus, if you want to change the value of a parameter it needs to be at the beginning of a line.
I haven’t had a chance to use it yet, but I do believe you can use the special FLIP command which will change it’s state on each recall, instead of using the X EZ X command above. Note that you can only use it once per preset if you want predictable results.