F# 如何实现布尔异或?
显然,没有按位异或运算符的布尔版本F# 如何实现布尔异或?,f#,F#,显然,没有按位异或运算符的布尔版本(^^^^)。。。怎么办?这是由不相等运算符提供的好的。我被难住了。如何替代布尔异或?在输入不同时为True,在输入相同时为False。这正是xor操作所做的。当然!我问得太匆忙了。让你想知道为什么C#拥有它。在F#中,异或运算符的一个细微区别是推断其操作数为bool类型。Doy,是的,这很有效,谢谢。但是我看到使用会导致F#编译器发出类似调用x;叫y;ceq;ldc.i4.0;ceq而C#编译器将发出调用x;叫y;异或用于^。。。我想知道是否存在(微)性能影响
(^^^^)
。。。怎么办?这是由不相等运算符提供的
好的。我被难住了。
如何替代布尔异或?
在输入不同时为True,在输入相同时为False。这正是xor操作所做的。当然!我问得太匆忙了。让你想知道为什么C#拥有它。在F#中,异或运算符的一个细微区别是推断其操作数为bool类型。Doy,是的,这很有效,谢谢。但是我看到使用
会导致F#编译器发出类似调用x;叫y;ceq;ldc.i4.0;ceq
而C#编译器将发出调用x;叫y;异或
用于^
。。。我想知道是否存在(微)性能影响。可以使用内联IL发出xor
指令,但此功能已被弃用,他们告诉我们,他们打算在下一版本中删除它:让内联xor(x:bool)(y:bool)=(#“xor”x y:bool)
如果已知类型为bool,为什么要内联?还有,为什么不让xor a b=if a那么就不让b else b
或者甚至让xor a b=ab
?
let inline xor a b = (a || b) && not (a && b)