If it's normal-order, test will return 0 because the y=(p) won't be looked at if the x=0 wasn't 0, i.e. it is never looked at. If it's applicative order, I guess test will either hang the interpreter, overflow the stack, or the interpreter will be clever and work in the I-mode and say "You can't do that", because: applicative-order interpreter will want to work out y=p=p=p=p=p as soon as 'test' is called.