I would think x nand y should produce the same value as nand x y by definition, the only difference being that y (and thus its possible side effects) would not be executed if the value of x already fixes the outcome (i.e equals false).
First, remember that the order of operation is from back to front. So you meant to say, "the only difference being that x (and thus its possible side effects) would not be executed if the value of y already fixes the outcome (i.e equals false)."
If y is false in "x nand y", it would exit the expression with a value of true without evaluating x. But if y is true, it would evaluate x. If x is false, then "nand x y" would be true, but "x nand y" would return the value of x, which would be false.
First, remember that the order of operation is from back to front. So you meant to say, "the only difference being that x (and thus its possible side effects) would not be executed if the value of y already fixes the outcome (i.e equals false)."
If y is false in "x nand y", it would exit the expression with a value of true without evaluating x. But if y is true, it would evaluate x. If x is false, then "nand x y" would be true, but "x nand y" would return the value of x, which would be false.